The Hummer (NTSC) ROM disected ----------------------------- Version 0.1 2005-12-30 Written by Daniel Kahlin $Id: hummer_kernal.txt,v 1.2 2005-12-30 22:11:11 tlr Exp $ ROM Version: This information is valid for the DTV V2 based Hummer Game, flash image "2005 08 22 03:16:34" (stated at the bottom of the directory listing). Detailed listing of ROM differences: ------------------------------------ The HUMMER ROM seems to be a patch upon the C64 Kernal version 3 (901227-03). ---------------------------------------------------------------------------- ;Kernal CINT (Initialize Screen and Keyboard) E518 20 36 F7 JSR $F736 ;was: JSR $E5A0 ---------------------------------------------------------------------------- E59A 20 36 F7 JSR $F736 ;was: JSR $E5A0 ---------------------------------------------------------------------------- F72C 60 RTS ;was: Get Next Tape File Header from Cassette F72D 4C 50 F9 JMP $F950 ;Jump #0: Reset Entry F730 4C 3C F7 JMP $F73C ;Jump #1: Load F733 4C 8F FB JMP $FB8F ;Jump #2: Save F736 4C AA FB JMP $FBAA ;Jump #3: Reset Video Mode F739 4C CD FB JMP $FBCD ;Jump #4: Reset Palette ---------------------------------------------------------------------------- ; Jump #1: Load F73C 85 93 STA $93 ;Set verify flag F73E A5 BA LDA $BA ;Get device number F740 C9 01 CMP #$01 ;=1 F742 F0 03 BEQ $F747 ;yes, load from flash. F744 4C A7 F4 JMP $F4A7 ;no, go to normal load. F747 08 PHP F748 78 SEI F749 A9 00 LDA #$00 F74B 85 93 STA $93 ;Clear Verify flag F74D A2 01 LDX #$01 F74F 8E 3F D0 STX $D03F ;Enable extended registers. F752 8D 07 D3 STA $D307 ;DMA source and destination step=1 F755 8D 09 D3 STA $D309 F758 8E 06 D3 STX $D306 F75B 8E 08 D3 STX $D308 ;--- F75E 20 71 F8 JSR $F871 F761 A2 00 LDX #$00 F763 86 FB STX $FB F765 86 FC STX $FC F767 A9 40 LDA #$40 F769 85 F8 STA $F8 F76B E8 INX F76C 86 FD STX $FD F76E A9 00 LDA #$00 F770 85 F6 STA $F6 F772 A9 01 LDA #$01 F774 85 F7 STA $F7 F776 20 14 F9 JSR $F914 F779 20 24 F9 JSR $F924 F77C A9 20 LDA #$20 ;One dir entry ($20 bytes) F77E 20 9D F8 JSR $F89D ;DMA Bytes (Acc=num bytes) F781 AD 00 01 LDA $0100 ;First byte of entry=00? F784 D0 07 BNE $F78D ;no, check filename. F786 20 71 F8 JSR $F871 F789 28 PLP F78A 4C 04 F7 JMP $F704 ;Exit with File Not Found F78D A5 B7 LDA $B7 F78F D0 07 BNE $F798 F791 20 71 F8 JSR $F871 F794 28 PLP F795 4C 10 F7 JMP $F710 ;Exit with Missing Filename F798 C9 18 CMP #$18 ;Filename longer than 24 chars? F79A 90 02 BCC $F79E ;No, continue F79C B0 E8 BCS $F786 ;Yes, File Not Found F79E A0 00 LDY #$00 ;Match filename F7A0 B1 BB LDA ($BB),Y F7A2 C9 2A CMP #$2A F7A4 F0 0F BEQ $F7B5 F7A6 D9 00 01 CMP $0100,Y F7A9 D0 46 BNE $F7F1 ;mismatch, get next entry F7AB C8 INY F7AC C4 B7 CPY $B7 F7AE D0 F0 BNE $F7A0 F7B0 B9 00 01 LDA $0100,Y F7B3 D0 3C BNE $F7F1 ;--- differing lengths, get next entry F7B5 A2 07 LDX #$07 F7B7 BD 18 01 LDA $0118,X F7BA 95 F3 STA $F3,X F7BC CA DEX F7BD 10 F8 BPL $F7B7 F7BF A5 F3 LDA $F3 F7C1 18 CLC F7C2 65 F9 ADC $F9 F7C4 85 FB STA $FB F7C6 A5 F4 LDA $F4 F7C8 65 FA ADC $FA F7CA 85 FC STA $FC F7CC A5 F5 LDA $F5 F7CE 69 00 ADC #$00 F7D0 85 FD STA $FD F7D2 A5 B9 LDA $B9 F7D4 D0 08 BNE $F7DE F7D6 A5 C3 LDA $C3 F7D8 85 F6 STA $F6 F7DA A5 C4 LDA $C4 F7DC 85 F7 STA $F7 F7DE A5 F8 LDA $F8 F7E0 09 40 ORA #$40 F7E2 85 F8 STA $F8 F7E4 20 F9 F7 JSR $F7F9 F7E7 20 71 F8 JSR $F871 F7EA 28 PLP F7EB A9 00 LDA #$00 F7ED 85 90 STA $90 F7EF 18 CLC F7F0 60 RTS F7F1 A9 20 LDA #$20 F7F3 20 34 F9 JSR $F934 ;Update Source Ptr F7F6 4C 76 F7 JMP $F776 F7F9 20 AC F8 JSR $F8AC F7FC B9 00 01 LDA $0100,Y F7FF F0 18 BEQ $F819 F801 30 22 BMI $F825 F803 AA TAX F804 20 14 F9 JSR $F914 F807 20 24 F9 JSR $F924 F80A 8A TXA F80B 20 F4 F8 JSR $F8F4 F80E 8A TXA F80F 20 42 F9 JSR $F942 ;Update Destination Ptr F812 C8 INY F813 C0 40 CPY #$40 F815 D0 E5 BNE $F7FC F817 F0 E0 BEQ $F7F9 F819 8D 1D D3 STA $D31D F81C A6 F6 LDX $F6 F81E 86 AE STX $AE F820 A4 F7 LDY $F7 F822 84 AF STY $AF F824 60 RTS F825 49 80 EOR #$80 F827 85 F2 STA $F2 F829 C8 INY F82A C0 40 CPY #$40 F82C D0 03 BNE $F831 F82E 20 AC F8 JSR $F8AC F831 B9 00 01 LDA $0100,Y F834 84 FE STY $FE F836 85 FF STA $FF F838 A6 F8 LDX $F8 F83A A4 F7 LDY $F7 F83C D0 01 BNE $F83F F83E CA DEX F83F 88 DEY F840 A5 F6 LDA $F6 F842 18 CLC F843 65 FF ADC $FF F845 90 04 BCC $F84B F847 C8 INY F848 D0 01 BNE $F84B F84A E8 INX F84B 8D 00 D3 STA $D300 F84E 8C 01 D3 STY $D301 F851 8A TXA F852 09 40 ORA #$40 F854 8D 02 D3 STA $D302 F857 20 24 F9 JSR $F924 F85A A5 F2 LDA $F2 F85C 20 9D F8 JSR $F89D F85F A5 F2 LDA $F2 F861 20 42 F9 JSR $F942 ;Update Destination Ptr F864 A4 FE LDY $FE F866 C8 INY F867 C0 40 CPY #$40 F869 F0 03 BEQ $F86E F86B 4C FC F7 JMP $F7FC F86E 4C F9 F7 JMP $F7F9 F871 A0 40 LDY #$40 F873 8C 05 D3 STY $D305 F876 C8 INY F877 8C 02 D3 STY $D302 F87A A9 00 LDA #$00 F87C 8D 0B D3 STA $D30B F87F 8D 04 D3 STA $D304 F882 A9 10 LDA #$10 F884 8D 01 D3 STA $D301 F887 A9 F2 LDA #$F2 F889 8D 00 D3 STA $D300 F88C 8D 03 D3 STA $D303 F88F A9 4E LDA #$4E F891 8D 0A D3 STA $D30A F894 A9 0F LDA #$0F F896 8D 1F D3 STA $D31F F899 4C A5 F8 JMP $F8A5 ;Check for DMA finished F89C 60 RTS ;DMA Bytes (Acc=num bytes) F89D 20 FD F8 JSR $F8FD ;Set DMA Length F8A0 A9 0D LDA #$0D ;Source Dir=pos, Dest Dir=pos F8A2 8D 1F D3 STA $D31F ;Force Start=1 F8A5 AD 1F D3 LDA $D31F ;Check for DMA finished F8A8 4A LSR A F8A9 B0 FA BCS $F8A5 F8AB 60 RTS F8AC 20 A5 F8 JSR $F8A5 ;Check for DMA finished F8AF A9 00 LDA #$00 F8B1 8D 1D D3 STA $D31D F8B4 A5 F3 LDA $F3 F8B6 8D 00 D3 STA $D300 F8B9 A5 F4 LDA $F4 F8BB 8D 01 D3 STA $D301 F8BE A5 F5 LDA $F5 F8C0 8D 02 D3 STA $D302 F8C3 A9 00 LDA #$00 F8C5 8D 03 D3 STA $D303 F8C8 A9 01 LDA #$01 F8CA 8D 04 D3 STA $D304 F8CD A9 40 LDA #$40 F8CF 8D 05 D3 STA $D305 F8D2 A9 40 LDA #$40 F8D4 8D 0A D3 STA $D30A F8D7 A9 0D LDA #$0D F8D9 8D 1F D3 STA $D31F F8DC A5 F3 LDA $F3 F8DE 18 CLC F8DF 69 40 ADC #$40 F8E1 85 F3 STA $F3 F8E3 90 06 BCC $F8EB F8E5 E6 F4 INC $F4 F8E7 D0 02 BNE $F8EB F8E9 E6 F5 INC $F5 F8EB 20 A5 F8 JSR $F8A5 ;Check for DMA finished F8EE 20 24 F9 JSR $F924 F8F1 A0 00 LDY #$00 F8F3 60 RTS ;Do DMA (Acc=num bytes) F8F4 48 PHA F8F5 20 9D F8 JSR $F89D F8F8 68 PLA F8F9 20 34 F9 JSR $F934 ;Update Source Ptr F8FC 60 RTS ;Set DMA Length (Acc=length) F8FD 8D 0A D3 STA $D30A F900 A9 00 LDA #$00 F902 8D 0B D3 STA $D30B F905 60 RTS ; Set DMA Destination from Acc F906 8D 03 D3 STA $D303 F909 A9 00 LDA #$00 F90B 8D 04 D3 STA $D304 F90E A9 40 LDA #$40 F910 8D 05 D3 STA $D305 F913 60 RTS ; Set DMA Source from $FB-$FD F914 A5 FB LDA $FB F916 8D 00 D3 STA $D300 F919 A5 FC LDA $FC F91B 8D 01 D3 STA $D301 F91E A5 FD LDA $FD F920 8D 02 D3 STA $D302 F923 60 RTS ; Set DMA Destination from $F6-$F8 F924 A5 F6 LDA $F6 F926 8D 03 D3 STA $D303 F929 A5 F7 LDA $F7 F92B 8D 04 D3 STA $D304 F92E A5 F8 LDA $F8 F930 8D 05 D3 STA $D305 F933 60 RTS ;Update Source Ptr F934 18 CLC F935 65 FB ADC $FB F937 85 FB STA $FB F939 90 06 BCC $F941 F93B E6 FC INC $FC F93D D0 02 BNE $F941 F93F E6 FD INC $FD F941 60 RTS ;Update Destination Ptr F942 18 CLC F943 65 F6 ADC $F6 F945 85 F6 STA $F6 F947 90 06 BCC $F94F F949 E6 F7 INC $F7 F94B D0 02 BNE $F94F F94D E6 F8 INC $F8 F94F 60 RTS ---------------------------------------------------------------------------- ; Jump #0: Reset Entry F950 A2 FF LDX #$FF F952 78 SEI F953 9A TXS F954 D8 CLD F955 A2 00 LDX #$00 F957 8E 20 D0 STX $D020 F95A 8E 11 D0 STX $D011 F95D 20 A3 FD JSR $FDA3 F960 20 50 FD JSR $FD50 F963 20 15 FD JSR $FD15 F966 20 53 E4 JSR $E453 F969 20 BF E3 JSR $E3BF F96C AD 11 D0 LDA $D011 F96F 10 FB BPL $F96C F971 AD 11 D0 LDA $D011 F974 30 FB BMI $F971 F976 20 A0 E5 JSR $E5A0 F979 A9 00 LDA #$00 F97B 8D 20 D0 STA $D020 F97E 8D 11 D0 STA $D011 F981 20 1B E5 JSR $E51B F984 20 5E FF JSR $FF5E F987 58 CLI F988 78 SEI F989 A9 7F LDA #$7F F98B 8D 00 DC STA $DC00 ;Check for F98E AD 01 DC LDA $DC01 F991 29 04 AND #$04 ;Is pressed? F993 D0 03 BNE $F998 ;no, continue F995 4C 62 FA JMP $FA62 ;yes, go to DTVLOAD F998 A2 01 LDX #$01 F99A 8E 3F D0 STX $D03F F99D A9 00 LDA #$00 F99F 8D 03 DD STA $DD03 F9A2 AD 01 DD LDA $DD01 F9A5 29 F8 AND #$F8 F9A7 85 AA STA $AA F9A9 29 03 AND #$03 F9AB 8D 40 D0 STA $D040 F9AE A5 AA LDA $AA F9B0 4A LSR A F9B1 4A LSR A F9B2 29 0F AND #$0F F9B4 8D 4F D0 STA $D04F F9B7 24 AA BIT $AA F9B9 70 03 BVS $F9BE F9BB A9 07 LDA #$07 F9BD 2C .BYTE $2C F9BE A9 06 LDA #$06 F9C0 8D 4E D0 STA $D04E F9C3 24 AA BIT $AA F9C5 30 03 BMI $F9CA F9C7 A0 02 LDY #$02 F9C9 2C .BYTE $2C F9CA A0 05 LDY #$05 F9CC A5 01 LDA $01 F9CE 29 10 AND #$10 F9D0 D0 0A BNE $F9DC F9D2 98 TYA F9D3 18 CLC F9D4 69 06 ADC #$06 F9D6 A8 TAY F9D7 A9 00 LDA #$00 F9D9 8D 4E D0 STA $D04E F9DC A2 02 LDX #$02 F9DE B9 9E FB LDA $FB9E,Y F9E1 9D 41 D0 STA $D041,X F9E4 88 DEY F9E5 CA DEX F9E6 10 F6 BPL $F9DE F9E8 A9 00 LDA #$00 F9EA 8D 3F D0 STA $D03F F9ED A2 FB LDX #$FB F9EF 9A TXS F9F0 A9 08 LDA #$08 F9F2 A8 TAY F9F3 A2 01 LDX #$01 F9F5 20 BA FF JSR $FFBA F9F8 A9 FE LDA #$FE F9FA 8D 00 DC STA $DC00 ;Check for F9FD AD 01 DC LDA $DC01 FA00 C9 FE CMP #$FE ;Is pressed? FA02 F0 2B BEQ $FA2F ;yes, skip to test... FA04 A9 06 LDA #$06 ;no, normal load... FA06 A2 29 LDX #$29 FA08 A0 FA LDY #$FA FA0A 20 BD FF JSR $FFBD FA0D A9 00 LDA #$00 FA0F 20 D5 FF JSR $FFD5 FA12 86 2D STX $2D FA14 84 2E STY $2E FA16 A9 93 LDA #$93 FA18 8D 00 DD STA $DD00 FA1B A9 15 LDA #$15 FA1D 8D 18 D0 STA $D018 FA20 58 CLI FA21 A9 0B LDA #$0B FA23 8D 11 D0 STA $D011 FA26 4C 0D 08 JMP $080D FA29 48 55 4D 4D 45 52 ; "HUMMER" ---------------------------------------------------------------------------- FA2F A9 0E LDA #$0E FA31 8D 20 D0 STA $D020 FA34 A9 06 LDA #$06 FA36 8D 21 D0 STA $D021 FA39 A9 1B LDA #$1B FA3B 8D 11 D0 STA $D011 FA3E A9 04 LDA #$04 FA40 A2 5E LDX #$5E FA42 A0 FA LDY #$FA FA44 20 BD FF JSR $FFBD FA47 A9 00 LDA #$00 FA49 20 D5 FF JSR $FFD5 FA4C 86 2D STX $2D FA4E 84 2E STY $2E FA50 A9 93 LDA #$93 FA52 8D 00 DD STA $DD00 FA55 A9 15 LDA #$15 FA57 8D 18 D0 STA $D018 FA5A 58 CLI FA5B 4C 0D 08 JMP $080D FA5E 54 45 53 54 ; "TEST" ---------------------------------------------------------------------------- ; DTVLOAD FA62 A2 01 LDX #$01 FA64 8E 3F D0 STX $D03F FA67 A9 00 LDA #$00 FA69 8D 40 D0 STA $D040 FA6C A9 01 LDA #$01 FA6E 8D 4F D0 STA $D04F FA71 A9 07 LDA #$07 FA73 8D 4E D0 STA $D04E FA76 A0 02 LDY #$02 FA78 A2 02 LDX #$02 FA7A B9 9E FB LDA $FB9E,Y FA7D 9D 41 D0 STA $D041,X FA80 88 DEY FA81 CA DEX FA82 10 F6 BPL $FA7A FA84 A9 00 LDA #$00 FA86 8D 3F D0 STA $D03F FA89 58 CLI FA8A A9 0E LDA #$0E FA8C 8D 20 D0 STA $D020 FA8F A9 06 LDA #$06 FA91 8D 21 D0 STA $D021 FA94 A9 1B LDA #$1B FA96 8D 11 D0 STA $D011 FA99 20 53 E4 JSR $E453 FA9C 20 BF E3 JSR $E3BF FA9F 20 22 E4 JSR $E422 FAA2 A2 FB LDX #$FB FAA4 9A TXS FAA5 A0 00 LDY #$00 FAA7 B9 3E FB LDA $FB3E,Y FAAA F0 06 BEQ $FAB2 FAAC 20 D2 FF JSR $FFD2 FAAF C8 INY FAB0 D0 F5 BNE $FAA7 FAB2 20 68 FB JSR $FB68 FAB5 A9 FF LDA #$FF FAB7 85 F6 STA $F6 FAB9 A9 20 LDA #$20 FABB 85 F7 STA $F7 FABD A5 C5 LDA $C5 FABF C9 40 CMP #$40 FAC1 D0 6C BNE $FB2F FAC3 A5 01 LDA $01 FAC5 29 10 AND #$10 FAC7 C5 02 CMP $02 FAC9 D0 1A BNE $FAE5 FACB C6 F6 DEC $F6 FACD D0 EE BNE $FABD FACF C6 F7 DEC $F7 FAD1 D0 EA BNE $FABD FAD3 AD 01 DD LDA $DD01 FAD6 C9 C2 CMP #$C2 FAD8 D0 DB BNE $FAB5 FADA AD 00 DD LDA $DD00 FADD 49 04 EOR #$04 FADF 8D 00 DD STA $DD00 FAE2 4C B5 FA JMP $FAB5 FAE5 78 SEI FAE6 20 78 FB JSR $FB78 FAE9 C9 C2 CMP #$C2 FAEB D0 F9 BNE $FAE6 FAED 20 78 FB JSR $FB78 FAF0 C9 C2 CMP #$C2 FAF2 F0 F9 BEQ $FAED FAF4 C9 72 CMP #$72 FAF6 D0 40 BNE $FB38 FAF8 A0 00 LDY #$00 FAFA 20 78 FB JSR $FB78 FAFD 99 F6 00 STA $F6,Y FB00 C8 INY FB01 C0 04 CPY #$04 FB03 D0 F5 BNE $FAFA FB05 A0 00 LDY #$00 FB07 A5 01 LDA $01 FB09 29 10 AND #$10 FB0B C5 02 CMP $02 FB0D F0 F8 BEQ $FB07 FB0F 85 02 STA $02 FB11 AD 01 DD LDA $DD01 FB14 91 F6 STA ($F6),Y FB16 AD 00 DD LDA $DD00 FB19 49 04 EOR #$04 FB1B 8D 00 DD STA $DD00 FB1E E6 F8 INC $F8 FB20 D0 06 BNE $FB28 FB22 E6 F9 INC $F9 FB24 D0 02 BNE $FB28 FB26 F0 07 BEQ $FB2F FB28 C8 INY FB29 D0 DC BNE $FB07 FB2B E6 F7 INC $F7 FB2D D0 D8 BNE $FB07 FB2F 58 CLI FB30 20 E4 FF JSR $FFE4 FB33 A2 80 LDX #$80 FB35 6C 00 03 JMP ($0300) FB38 CE 20 D0 DEC $D020 FB3B 4C 2F FB JMP $FB2F FB3E 0D 20 57 41 49 54 49 4E ; CR, " WAITIN" FB46 47 20 46 4F 52 20 44 54 ; "G FOR DT" FB4E 56 4C 4F 41 44 2E 20 41 ; "VLOAD. A" FB56 4E 59 20 4B 45 59 20 46 ; "NY KEY F" FB5E 4F 52 20 42 41 53 49 43 ; "OR BASIC" FB65 0D 00 ; CR, 0 FB68 A9 00 LDA #$00 FB6A 8D 03 DD STA $DD03 FB6D A9 2F LDA #$2F FB6F 85 00 STA $00 FB71 A5 01 LDA $01 FB73 29 10 AND #$10 FB75 85 02 STA $02 FB77 60 RTS FB78 A5 01 LDA $01 FB7A 29 10 AND #$10 FB7C C5 02 CMP $02 FB7E F0 F8 BEQ $FB78 FB80 85 02 STA $02 FB82 AE 01 DD LDX $DD01 FB85 AD 00 DD LDA $DD00 FB88 49 04 EOR #$04 FB8A 8D 00 DD STA $DD00 FB8D 8A TXA FB8E 60 RTS ---------------------------------------------------------------------------- ; Jump #2: Save FB8F A5 BA LDA $BA FB91 C9 01 CMP #$01 FB93 F0 03 BEQ $FB98 FB95 4C ED F5 JMP $F5ED FB98 A9 00 LDA #$00 FB9A 85 90 STA $90 FB9C 18 CLC FB9D 60 RTS FB9E 1C 13 2A .BYTE $1C,$13,$2A FBA1 24 31 5B .BYTE $24,$31,$5B FBA4 1C 00 00 .BYTE $1C,$00,$00 FBA7 24 00 00 .BYTE $24,$00,$00 ---------------------------------------------------------------------------- ; Jump #3: Reset Video Mode FBAA A9 01 LDA #$01 FBAC 8D 3F D0 STA $D03F FBAF A2 07 LDX #$07 FBB1 A9 00 LDA #$00 FBB3 9D 36 D0 STA $D036,X FBB6 9D 45 D0 STA $D045,X FBB9 CA DEX FBBA 10 F7 BPL $FBB3 FBBC 8D 4D D0 STA $D04D FBBF A9 76 LDA #$76 FBC1 8D 36 D0 STA $D036 FBC4 8D 3A D0 STA $D03A FBC7 20 CD FB JSR $FBCD FBCA 4C A0 E5 JMP $E5A0 ;Continue to load the VIC-II defaults ---------------------------------------------------------------------------- ; Jump #4: Reset Palette FBCD A9 01 LDA #$01 ;Reset Palette FBCF 8D 3F D0 STA $D03F FBD2 A2 0F LDX #$0F FBD4 BD E3 FB LDA $FBE3,X FBD7 9D 00 D2 STA $D200,X FBDA CA DEX FBDB 10 F7 BPL $FBD4 FBDD A9 00 LDA #$00 FBDF 8D 3F D0 STA $D03F FBE2 60 RTS FBE3 00 0F 36 BE 58 DB 86 FF ;Default Palette FBEB 29 26 3B 05 07 DF 9A 0A ; ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- FCE2 4C 2D F7 JMP $F72D ;Reset Hook, was: LDX #$FF, SEI ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- FD4C 30 F7 .WORD $F730 ;Load Vector, was: $F4A5 FD4E 33 F7 .WORD $F733 ;Save Vector, was: $F5ED ---------------------------------------------------------------------------- --- eof