Code: Select all
; ----------------------------------------------------
; -- Checksum Stuff --
; -- Stored @ $2004 --
; -- Checksum is 0x2006 to 0x???? --
; -- Quadstar87 - Pcmhacking.net --
; ----------------------------------------------------
63A4 B6 10 02 L63A4 ldaA PORTG
63A7 36 pushA
63A8 CE 10 02 ldX #$1002
63AB 1D 00 08 bclr 0, X, #%00001000
63AE CE 20 06 ldX #$2006 ;cal start address
63B1 BD 68 EE call L68EE ;do some math
63B4 18 3C pushY
63B6 CE 10 02 ldX #$1002
63B9 1C 00 08 bset 0, X, #%00001000
63BC CE 80 00 ldX #$8000 ;cal end address?
63BF BD 68 EE call L68EE
63C2 18 8F xgDY
63C4 30 tSX
63C5 E3 00 addD 0, X
63C7 18 8F xgDY
63C9 38 popX
63CA CE 10 02 ldX #$1002
63CD 32 popA
63CE 84 08 andA #%00001000
63D0 27 05 beq L63D7 ;branch if
63D2 1C 00 08 bset 0, X, #%00001000
63D5 20 03 jr L63DA
;
63D7 1D 00 08 L63D7 bclr 0, X, #%00001000
63DA B6 20 06 L63DA ldaA L2006 ;cal start address
63DD 18 3C pushY
63DF 18 38 popY
63E1 18 BC 20 04 cmpY L2004 ;checksum store address
63E5 26 13 bne L63FA ;branch if not done
63E7 81 A4 cmpA #$A4
63E9 26 0F bne L63FA ;branch to compare?
63EB B6 18 57 ldaA L1857
63EE 27 0E beq L63FE
63F0 4F clrA
63F1 18 CE 51 E7 ldY #$51E7
63F5 BD 7D A9 call L7DA9
63F8 20 13 jr L640D
;
63FA 81 AA L63FA cmpA #$AA ; compare to $AA
63FC 27 0F beq L640D ; Exit - Branch for development mode
63FE 86 01 L63FE ldaA #$01
6400 18 CE 51 E7 ldY #$51E7
6404 BD 7D A9 call L7DA9 ;call sub
6407 BD 62 A8 call L62A8 ;call sub
640A 7F 18 57 clr L1857
640D 39 L640D ret
;
;---68EE is the CheckSum math---
;
68EE 18 CE 00 00 L68EE: ldY #$0000
68F2 3C pushX
68F3 32 popA
68F4 32 popA
68F5 5F clrB
68F6 04 lsrD
68F7 04 lsrD
68F8 04 lsrD
68F9 5D tstB
68FA 27 0D beq L6909
68FC 4C incA
68FD 36 pushA
68FE 17 tBA ;get # bytes to handle
68FF E6 00 L68FF ldaB 0, X ;get byte
6901 18 3A aBY ;add to checksum
6903 08 incX ;increment
6904 8B 20 addA #$20 ;add 32 (20dec=32hex)
6906 26 F7 bne L68FF ;Branch If Not Done
6908 32 popA
6909 C6 08 L6909 ldaB #$08
690B 18 8F L690B xgDY
690D EB 00 addB 0, X ;add each 8 bytes to checksum
690F 89 00 adcA #$00
6911 EB 01 addB 1, X
6913 89 00 adcA #$00
6915 EB 02 addB 2, X
6917 89 00 adcA #$00
6919 EB 03 addB 3, X
691B 89 00 adcA #$00
691D EB 04 addB 4, X
691F 89 00 adcA #$00
6921 EB 05 addB 5, X
6923 89 00 adcA #$00
6925 EB 06 addB 6, X
6927 89 00 adcA #$00
6929 EB 07 addB 7, X
692B 89 00 adcA #$00
692D 18 8F xgDY
692F 3A aBX
6930 4C incA ;increment counter
6931 26 D8 bne L690B ; Branch if Not Zero and Continue With Checksum Calculation
6933 86 55 ldaA #$55
6935 B7 10 3A staA COPRST
6938 B7 18 06 staA L1806
693B 43 comA
693C B7 10 3A staA COPRST
693F B7 18 06 staA L1806
6942 4F clrA ;Start counter
6943 8C 00 00 cmpX #$0000 ;check if finished
6946 26 C3 bne L690B ;else branch to next location
6948 39 ret
;
;Few calls to 7DA9
;
7DA9 F6 10 02 L7DA9: ldaB PORTG
7DAC 37 pushB
7DAD CE 10 02 ldX #$1002
7DB0 1C 00 08 bset 0, X, #%00001000
7DB3 BD F8 EB call LF8EB
7DB6 CE 10 02 ldX #$1002
7DB9 33 popB
7DBA C4 08 andB #%00001000
7DBC 27 05 beq L7DC3
7DBE 1C 00 08 bset 0, X, #%00001000
7DC1 20 03 jr L7DC6
;