;****************************************************************************** ;****************************************************************************** ; ; The almost completely commented C64 BASIC ROM disassembly. ; Based on version V1.01 by Lee Davison 2012 ; ;****************************************************************************** ; ; start of the kernal ROM ; ; version 390852-01, second part, for the Commodore 64 GS ; ; extra variables for the C64GS .eq Z_FB = $FB .eq Z_FC = $FC .eq Z_FD = $FD .ba $E449 .wo MainWaitLoopGS ; [F72E] .ba $E4B7 .fb $00,28 ; unused .ba $F199 GetByteTape: ; [F199] jsr DevNotPresntGS ; [FB4D] .ba $F19E jsr DevNotPresntGS ; [FB4D] .ba $F1E5 jsr DevNotPresntGS ; [FB4D] .ba $F1EA jsr DevNotPresntGS ; [FB4D] .ba $F2CE jsr DevNotPresntGS ; [FB4D] .ba $F2D7 jsr DevNotPresntGS ; [FB4D] .ba $F2E8 jsr DevNotPresntGS ; [FB4D] .ba $F38B A_F38B: ; [F38B] jsr DevNotPresntGS ; [FB4D] .ba $F399 jsr DevNotPresntGS ; [FB4D] .ba $F3A5 jsr DevNotPresntGS ; [FB4D] .ba $F3AF A_F3AF: ; [F3AF] jsr DevNotPresntGS ; [FB4D] .ba $F3B8 A_F3B8: ; [F3B8] jsr DevNotPresntGS ; [FB4D] .ba $F3BF jsr DevNotPresntGS ; [FB4D] .ba $F539 A_F539: ; [F539] jsr DevNotPresntGS ; [FB4D] .ba $F541 A_F541: ; [F541] jsr DevNotPresntGS ; [FB4D] .ba $F54D jsr DevNotPresntGS ; [FB4D] .ba $F556 A_F556: ; [F556] jsr DevNotPresntGS ; [FB4D] .ba $F5A5 jsr DevNotPresntGS ; [FB4D] .ba $F65F A_F65F: ; [F65F] jsr DevNotPresntGS ; [FB4D] .ba $F664 jsr DevNotPresntGS ; [FB4D] .ba $F677 jsr DevNotPresntGS ; [FB4D] .ba $F67C jsr DevNotPresntGS ; [FB4D] .ba $F689 jsr DevNotPresntGS ; [FB4D] .ba $F72C FindTapeHdr2: ; [F72C] sec .by $24 ; dummy BIT opcode MainWaitLoopGS: ; [F72E] clc ror Z_FB php sei lda #$0B ; bit 4 = 0: turn screen off sta VICCTR1 lda #$17 ; bits 1..3: character set at $D800 sta VICRAM ; bits 4..7: video RAM at $0400 ;** Clear screen and colour it black ldx #$00 A_F73F: ; [F73F] lda #$00 sta ColourRAM,X sta ColourRAM+$100,X sta ColourRAM+$200,X sta ColourRAM+$300,X lda #' ' ; space sta VICSCN,X sta VICSCN+$100,X sta VICSCN+$200,X sta VICSCN+$300,X inx ; whole page done? bne A_F73F ; no, -> ;** Fill part of video screen with shifted space or graphic pattern lda #<(VICSCN+$53) sta Z_FC lda #>(VICSCN+$53) sta Z_FD ldx #$15 A_F768: ; [F768] ldy #33 ; 33 lines lda #$A0 ; shifted space A_F76C: ; [F76C] sta (Z_FC),Y dey bne A_F76C clc lda Z_FC adc #40 ; next line sta Z_FC bcc A_F77C inc Z_FD A_F77C: ; [F77C] dex ; all lines? bne A_F768 ; no, -> lda #' ' sta VICSCN+$74 sta VICSCN+$374 ;** Fill colour RAM lda #$0E ldx #$1F A_F78B: ; [F78B] sta ColourRAM+$54,X sta ColourRAM+$7C,X sta ColourRAM+$A4,X sta ColourRAM+$324,X sta ColourRAM+$34C,X dex bpl A_F78B ldx #<(ColourRAM+$CC) stx Z_FC ldx #>(ColourRAM+$CC) stx Z_FD ldx #$0F A_F7A7: ; [F7A7] lda #$0E ldy #$00 sta (Z_FC),Y ldy #$1F sta (Z_FC),Y clc lda Z_FC adc #40 ; next line sta Z_FC bcc A_F7BC inc Z_FD A_F7BC: ; [F7BC] dex bne A_F7A7 bit Z_FB bpl A_F7CA lda #$1B ; bit 4 = 1: turn screen on sta VICCTR1 plp rts ;** Fill screen memory with data (1) A_F7CA: ; [F7CA] ldx #$00 A_F7CC: ; [F7CC] lda D_F8CA,X beq A_F7D9 sta VICSCN+$81,X inx bpl A_F7CC ;** Fill screen memory with data (2) ldx #$07 A_F7D9: ; [F7D9] lda D_F8E5,X sta VICSCN+$3F8,X dex bpl A_F7D9 ;** Copy sprites into locations ldx #$3F A_F7E4: ; [F7E4] lda D_F90D,X sta VICSCN+$0A00,X lda D_F94D,X sta VICSCN+$0A40,X lda D_F98D,X sta VICSCN+$0A80,X lda D_F9CD,X sta VICSCN+$0AC0,X lda D_FA0D,X sta VICSCN+$0B00,X lda D_FA4D,X sta VICSCN+$0B40,X lda D_FA8D,X sta VICSCN+$0B80,X dex bpl A_F7E4 lda #$04 sta VICSPMC lda #$73 sta VICESPH ;* Another sprite J_F81B: ; [F81B] ldx #$3F A_F81D: ; [F81D] lda D_FACD,X sta VICSCN+$0BC0,X dex bpl A_F81D ldx #$0F A_F828: ; [F828] lda D_F8ED,X sta VICSBCO,X lda D_F8FD,X sta VIC_chip,X dex bpl A_F828 lda #$1B sta VICCTR1 lda #$BE sta VICSPEN jsr P_F89F ; [F89F] lda #$FC sta VICSPEN jsr P_F8AB ; [F8AB] lda #$BD sta VICSPEN jsr P_F8A8 ; [F8A8] lda #$3D sta VICSPEN jsr P_F8A8 ; [F8A8] A_F85C: ; [F85C] inc VICSP3Y jsr P_F8AE ; [F8AE] ldx VICSP3Y cpx #$7C bcc A_F85C jsr P_F8A8 ; [F8A8] ldx #$3F A_F86E: ; [F86E] lda D_FB0D,X sta VICSCN+$0BC0,X dex bpl A_F86E lda #$05 sta VICCSP7 lda #$7C sta VICSPEN jsr P_F8AB ; [F8AB] lda #$3E sta VICSPEN jsr P_F8A8 ; [F8A8] lda #$BE sta VICSPEN jsr P_F89F ; [F89F] lda #$04 sta VICSPEN jsr P_F8A8 ; [F8A8] jmp J_F81B ; [F81B] P_F89F: ; [F89F] jsr P_F8A8 ; [F8A8] jsr P_F8A8 ; [F8A8] jsr P_F8A8 ; [F8A8] P_F8A8: ; [F8A8] ldy #$28 .by $2C ; dummy BIT opcode P_F8AB: ; [F8AB] ldy #$06 .by $2C ; dummy BIT opcode P_F8AE: ; [F8AE] ldy #$02 A_F8B0: ; [F8B0] jsr P_F8BF ; [F8BF] dey bne A_F8B0 jsr Chk4Cartridge ; cartridge found? [FD02] beq A_F8BC ; yes, -> reset rts A_F8BC: ; [F8BC] jmp ($FFFC) P_F8BF: ; [F8BF] bit VICCTR1 bmi P_F8BF A_F8C4: ; [F8C4] bit VICCTR1 bpl A_F8C4 rts D_F8CA: ; [F8CA] .by $C3, $8F, $8D, $8D, $8F, $84, $8F, $92 .by $85, $A0, $C3, $B6, $B4, $A0, $C7, $81 .by $8D, $85, $93, $A0, $D3, $99, $93, $94 .by $85, $8D, $00 D_F8E5: ; [F8E5] .by $38, $39, $3A, $3B, $3C, $3D, $3E, $3F D_F8ED: ; [F8ED] .by $00, $06, $06, $01, $02, $03, $06, $01 .by $0F, $0F, $0A, $0F, $0F, $0F, $0F, $02 D_F8FD: ; [F8FD] .by $E0, $7E, $E0, $7E, $43, $43, $94, $64 .by $90, $82, $60, $82, $E0, $7E, $AC, $A7 D_F90D: ; [F90D] .by $80, $00, $00, $80, $00, $00, $FF, $C0 .by $00, $C0, $40, $00, $C0, $40, $00, $C0 .by $40, $00, $C0, $C0, $00, $C1, $80, $00 .by $C3, $00, $00, $C6, $00, $60, $CC, $00 .by $90, $C8, $00, $90, $C8, $40, $90, $C8 .by $80, $90, $C9, $F8, $60, $C8, $80, $00 .by $C8, $46, $77, $D8, $09, $44, $F0, $09 .by $66, $80, $09, $44, $80, $06, $44, $00 D_F94D: ; [F94D] .by $80, $00, $40, $80, $00, $40, $F0, $00 .by $40, $D8, $40, $40, $C8, $80, $40, $C9 .by $F8, $40, $C8, $80, $00, $C8, $43, $24 .by $C8, $04, $B4, $C8, $04, $AC, $C8, $04 .by $A4, $CC, $03, $24, $C6, $00, $00, $C3 .by $00, $00, $C1, $80, $00, $C0, $80, $00 .by $C0, $80, $00, $C0, $80, $00, $FF, $80 .by $00, $80, $00, $00, $80, $00, $00, $00 D_F98D: ; [F98D] .by $00, $00, $00, $00, $00, $00, $00, $00 .by $00, $01, $54, $00, $05, $54, $00, $05 .by $54, $00, $15, $54, $00, $15, $02, $A8 .by $14, $02, $A0, $14, $02, $80, $14, $00 .by $00, $14, $03, $C0, $14, $03, $F0, $15 .by $03, $FC, $15, $54, $00, $05, $54, $00 .by $05, $54, $00, $01, $54, $00, $00, $00 .by $00, $00, $00, $00, $00, $00, $00, $00 D_F9CD: ; [F9CD] .by $1F, $FF, $E0, $30, $00, $A0, $3F, $FF .by $A0, $3F, $FF, $A0, $20, $00, $A0, $20 .by $00, $A0, $20, $00, $A0, $3F, $FF, $A0 .by $3F, $FF, $A0, $3F, $FF, $A0, $3F, $FF .by $A0, $3F, $FF, $C0, $3F, $FF, $80, $00 .by $00, $00, $00, $60, $00, $00, $60, $00 .by $00, $60, $00, $03, $6C, $00, $01, $F8 .by $00, $00, $F0, $00, $00, $60, $00, $00 D_FA0D: ; [FA0D] .by $00, $00, $00, $00, $00, $00, $BF, $FF .by $7C, $BF, $FF, $7D, $7F, $FE, $F9, $60 .by $06, $FB, $DF, $ED, $F3, $80, $1D, $F6 .by $FF, $FB, $E6, $FF, $FB, $EC, $FF, $F7 .by $CC, $FF, $F7, $D8, $FF, $EF, $98, $FF .by $EF, $B0, $FF, $DF, $30, $00, $00, $60 .by $FF, $FF, $60, $FF, $FF, $C0, $FF, $FF .by $C0, $00, $00, $00, $00, $00, $00, $00 D_FA4D: ; [FA4D] .by $00, $00, $00, $00, $00, $00, $03, $FF .by $FF, $03, $FF, $FF, $07, $FF, $FF, $07 .by $FF, $FF, $0F, $FF, $FE, $0F, $FF, $FE .by $1F, $FF, $FD, $1F, $FF, $FD, $3F, $FF .by $FB, $3F, $FF, $FB, $7F, $FF, $F7, $7F .by $FF, $F7, $FF, $FF, $EF, $80, $00, $00 .by $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF .by $FF, $00, $00, $00, $00, $00, $00, $00 D_FA8D: ; [FA8D] .by $80, $00, $00, $80, $00, $00, $FE, $00 .by $00, $C1, $00, $00, $C1, $00, $00, $C2 .by $00, $00, $C2, $00, $00, $C4, $00, $00 .by $C4, $00, $00, $C8, $00, $00, $C8, $00 .by $00, $C8, $00, $00, $C4, $00, $00, $C4 .by $00, $00, $C2, $00, $00, $C2, $00, $00 .by $C1, $00, $00, $C1, $00, $00, $FE, $00 .by $00, $80, $00, $00, $80, $00, $00, $00 D_FACD: ; [FACD] .by $00, $00, $00, $E0, $00, $38, $F0, $00 .by $78, $78, $00, $F0, $3C, $01, $E0, $1E .by $03, $C0, $0F, $07, $80, $07, $8F, $00 .by $03, $DE, $00, $01, $FC, $00, $00, $F8 .by $00, $00, $F8, $00, $01, $FC, $00, $03 .by $DE, $00, $07, $8F, $00, $0F, $07, $80 .by $1E, $03, $C0, $3C, $01, $E0, $78, $00 .by $F0, $F0, $00, $78, $E0, $00, $38, $00 D_FB0D: ; [FB0D] .by $00, $00, $00, $00, $00, $38, $00, $00 .by $78, $00, $00, $F0, $00, $01, $E0, $00 .by $03, $C0, $00, $07, $80, $00, $0F, $00 .by $00, $1E, $00, $00, $3C, $00, $60, $78 .by $00, $E0, $F0, $00, $E1, $E0, $00, $E3 .by $C0, $00, $E7, $80, $00, $EF, $00, $00 .by $FE, $00, $00, $FC, $00, $00, $F8, $00 .by $00, $F0, $00, $00, $E0, $00, $00, $00 DevNotPresntGS: ; [FB4D] jmp DevNotPresent ; [F707] ; not used S_FB50: .fb $00,62 .ba $FB97 SetCounter: ; [FB97] .fb $00,$69 .by "COPYRIGHT 1990 COMMODORE ELECTRONICS LTD. ALL RIGHTS RESERVED." .fb $00,$16 .ba $FC57 J_FC57: ; [FC57] .fb $00,$3C .ba $FD83 nop bne A_FD6C .ba $FD9B TapeIrqVectors: ; [FD9B] .wo End_RS232_NMI ; [FEBC] .wo End_RS232_NMI ; [FEBC] .wo End_RS232_NMI ; [FEBC] .wo End_RS232_NMI ; [FEBC] ;******************************************************************************