09       .OPT NO LIST
10 ;  SAVE #D1:ROMTEST.M65
20 ;
30 ;
40 ;  LOAD #D1:ATARIROM.M65
50 ;
51 ; *= $FF73
52       .PAGE "ROM Test"
53        LIST  
54       .LOCAL 
80 ?JKP  .=  *
90       *=  $8B
0100 ?CSUM *= *+2
0110     *=  $9E
0120 ?CURR *= *+2    Address to add
0130 ?END *= *+2     Last address+1
0140     *=  ?JKP
0150 ;
0160 ; Verify 1st 8k of rom
0170 ;
065395 VFR LDX #0    Set index and
065397   STX ?CSUM   clear csum
065399   STX ?CSUM+1
065401 ?VFR1 JSR ?DOSUM
065404   CPX #12     Repeat 3 times
065406   BNE ?VFR1   N.B. selftest
065408   LDA OSROM   rom must be on
065411   LDX OSROM+1
065414 ?TEST2 CMP ?CSUM Compare rom sum
065416   BNE ?ROMERR to calculated
065418   CPX ?CSUM+1 checksum
065420   BNE ?ROMERR
065422   CLC         Flag rom ok
065423   RTS         a=$11
065424 ?ROMERR SEC   Return error
065425   RTS 
065426 VSR LDX #0    Verify second 8K
065428   STX ?CSUM   Clear cksum
065430   STX ?CSUM+1
065432   LDX #12     Start index
065434   JSR ?DOSUM  Do twice
065437   JSR ?DOSUM
065440   LDA ?CSUM2  Compare against
065443   LDX ?CSUM2+1 second sum
065446   JMP ?TEST2
065449 ?DOSUM LDY #0 Set start and end
065451 ?SETPTR LDA ?TSTAD,X pointers
065454   STA ?CURR,Y from table
065457   INX 
065458   INY 
065459   CPY #4
065461   BNE ?SETPTR
065463   LDY #0
065465 ?ADD CLC      Add everything
065466   LDA (?CURR),Y between pointers
065468   ADC ?CSUM   ignoring anything
065470   STA ?CSUM   past two bytes
065472   BCC ?OVRINC
065474   INC ?CSUM+1
065476 ?OVRINC INC ?CURR Bump source
065478   BNE ?OVRINC2
065480   INC ?CURR+1
065482 ?OVRINC2 LDA ?CURR Compare
065484   CMP ?END    source to
065486   BNE ?ADD    end
065488   LDA ?CURR+1
065490   CMP ?END+1
065492   BNE ?ADD    Loop til done
065494   RTS         Return c=1
065495 ?TSTAD .WORD OSROM+2,M0PF First
065499   .WORD $5000,$5800 8k to check
065503   .WORD AFP,CHARSET1
065505 ;
065507   .WORD CHARSET1,?CSUM2 2nd 8k
065511   .WORD HV.NMI,$00
065512 ;
065515   .BYTE 0,0,0 unused
065516 ; copy of rom start id
065518   .BYTE $10   day bcd rev date
065519   .BYTE $05   month "
065520   .BYTE $83   year  "
065521   .BYTE 2     Option byte
065522   .BYTE "BB"  Part num. Alpha
065524   .BYTE $00   ; "    "  bcd
065525   .BYTE $00   ; "    "    "
065526   .BYTE $01   ; "    "    "
065527   .BYTE 2     Rev num
065528 ?CSUM2 .WORD $6C8C
065529 ;
065530 HV.NMI .WORD NMI cpu hardware
065532   .WORD RESET1 vectors
065534   .WORD IRQ
