;----------------------------------------- ; Retro Replay Usage ROM ; 30.03.2002 - mekka symposium 2002 ; Beta 4 work source ; ; original code by WVL/Xenon ; some tweaks and fuckups by Count Zero/CPX ;----------------------------------------- ; SIMPLE MENU FOR RR ; 0 PROGS -> RESET! ; 1 PROG -> RUN ; >1 PROGS -> MENU #include "version.inc" *= $8000 .setpet ; flags IOBASE2 = $DE00 ; IOBASE area D8000: .dw reset D8002: .dw start1 .db $C3,$C2,$CD,$38,$30 ; CBM80 ;-------------------------------------------- reset: lda #%01000101 ; enables rr-ram allowbank bit, enables SS ; & disables FREEZE button ! ; & switches mirrors to $dexx for reu compat sta $de01 SEI LDX #$FF TXS CLD lda #$37 sta $01 inx stx $d016 JSR $FDA3 lda NUMBEROFPROG beq normalbasic keyagain: LDA $DC01 AND #$80 ; check 4 run/stop BNE skipnormalbasic normalbasic: jsr resetmachine ;jsr $fda3 ;jsr $fd50 ;JSR $FD15 ;JSR $FF5B ;JSR $E453 ;JSR $E3BF ldx #$10 lda ahead,x sta $0400,x dex bpl *-7 jmp $0400 ahead: lda #%00000110 ; disable cart sta $de00 JMP $E39A ; einschaltmeldung ; clr READY. ;---------------- skipnormalbasic: start1: jmp START ;------------------------------ resetmachine: jsr $fda3 ; IRQ Init ;jsr $fd50 replacement sei lda #$00 tay sta $0002,y sta $0200,y iny bne *-7 ldx #$3c ldy #$03 stx $b2 sty $b3 ldx #$00 ldy #$a0 jsr $fd8d ; fd15 replacement ldy #$1f lda $fd30,y sta $0314,y dey bpl *-7 JSR $FF5B ; video reset JSR $E453 ; basic vectors to $0300 JMP $E3BF ; ram fuer basic, chrget, etc --- init *= $8080 ;======================================= ; MENU DATA !! ;======================================= .setscr MENUDATA: .text "PF" ; header ... not really needed ; probably want to use it on the new detection routs .db hversion,mversion,lversion ; Versionstring aligned to Flashutil/ROM version NUMBEROFPROG: .db 0 ; $8085 LOADADRESS: .dw $0801 ; $8086 .dw $0801 ; $8088 .dw $0801 ; $808a .dw $0801 ; $808c .dw $0801 ; $808e .dw $0801 ; $8090 .dw $0801 ; $8092 .dw $0801 ; $8094 .dw $0801 ; $8096 ROMADRES: .dw $0500 ; $8098 --- lowest possible addy $0500 ! .dw $FFFF ; $809a .dw $FFFF ; $809c .dw $FFFF ; $809e .dw $FFFF ; $80a0 .dw $FFFF ; $80a2 .dw $FFFF ; $80a4 .dw $FFFF ; $80a6 .dw $FFFF ; $80a8 .dw $FFFF ; $80aa STARTADRESS: ;$FFFF in this table means "RUN" .dw $FFFF ; $80ac .dw $FFFF ; $80ae .dw $FFFF ; $80b0 .dw $FFFF ; $80b2 .dw $FFFF ; $80b4 .dw $FFFF ; $80b6 .dw $FFFF ; $80b8 .dw $FFFF ; $80ba .dw $FFFF ; $80bc FILENAMES: ; $80be .text "---- empty! ----" ; $80ce .text "---- empty! ----" ; $80de .text "---- empty! ----" ; $80ee .text "---- empty! ----" ; $80fe .text "---- empty! ----" ; $810e .text "---- empty! ----" ; $811e .text "---- empty! ----" ; $812e .text "---- empty! ----" ; $813e .text "---- empty! ----" ; $814e .db $ff ; endebyte ; $814f BORDERCOLOR: .db $00 ; $8150 BACKGROUNDCOLOR: .db $00 ; $8151 CRSRCOLOR: .db $0f ; $8152 CRMESSAGE: .text " retro replay program starter v" .db hversion .text "." .db mversion,lversion .text " " ;check"0123456789012345678901234567890123456789" INITONE: .db $37 .db $37 .db $37 .db $37 .db $37 .db $37 .db $37 .db $37 .db $37 CLISEI: .db $58 .db $58 .db $58 .db $58 .db $58 .db $58 .db $58 .db $58 .db $58 ;!ct pet *= $8200 ;======================================= COPIEDBLOCKS = $FB OPTION = $FB LOW = $FC HIGH = $FD MENUPOSITION = $0400+160 IOINIT = $FF84 RAMTAS = $FF87 RESTOR = $FF8A START: SEI ;CLEAR SCREEN+INIT C64 LDA #$37 STA $01 jsr resetmachine LDA #0 STA $D015 ; Sprites Off STA $D418 ; Volume Off STA OPTION LDA NUMBEROFPROG cmp #$01 bne printrest lda #$31 jmp skipin printrest: LDA CRSRCOLOR ; Setup Screen STA $0286 STA $D021 JSR $E544 BORDC: LDA BORDERCOLOR STA $D020 BACKC: LDA BACKGROUNDCOLOR STA $D021 ; DISPLAY MENU ;----------------------------- ldx #39 CRLOOP: LDA CRMESSAGE,X STA $0428,X DEX BPL CRLOOP LDA #MENUPOSITION STA HIGH LDX #0 MENULOOP: lda FILENAMES,X cmp #$ff beq KEYLOOP+3 LDY #$0B ; y offset on line MENUL: ; loop point TXA LSR LSR LSR LSR CLC ADC #$31 STA (LOW),Y ; write number INY INY MENUL2: LDA FILENAMES,X STA (LOW),Y INX INY CPY #$1D BNE MENUL2 ; otherwise print the filename LDA LOW CLC ADC #$28 STA LOW BCC *+4 INC HIGH ; inc screen pos CPX #9*16 BNE MENULOOP ; last menuoption printed ? BEQ *+5 ;----------------------------- ; KEYLOOP KEYLOOP: JSR INVERSELINE LDA #0 STA $0277 STA $C6 JSR $FF9F ; SCAN KEYBOARD LDA $0277 CMP #13 ; check return BNE *+5 JMP COPYROUTINE CMP #$03 BEQ MENURESET CMP #17 ; crsr down BEQ CRSDOWN CMP #145 ; crsr up BEQ CRSUP CMP #$3A BCS NOTNUMBER CMP #$31 BCC NOTNUMBER ; numbers skipin: AND #$0F TAX DEX CPX NUMBEROFPROG BCS NOTNUMBER STX OPTION BCC COPYROUTINE ;NUMMER! MENURESET: LDA #$37 STA $01 jmp normalbasic CRSDOWN: INC OPTION LDA OPTION CMP NUMBEROFPROG BNE NOTNUMBER LDA #0 STA OPTION NOTNUMBER: JSR INVERSELINE BIT $D011 ; ok for ntsc ? check BPL *-3 BIT $D011 BMI *-3 BPL KEYLOOP CRSUP: DEC OPTION BPL NOTNUMBER LDX NUMBEROFPROG DEX STX OPTION BPL NOTNUMBER INVERSELINE: LDA OPTION ASL ASL ADC OPTION ;OKEE ASL ASL ASL STA LOW LDA #2 ROL STA HIGH LDA LOW ADC # BASICSTART LDA #0 STA DECIDESTART+1 LDA STARTADRESS,Y STA STARTMACHINE+1 CMP #$FF ; inc decidestart+1 if BEQ *+5 INC DECIDESTART+1 ; startadress != $ffff LDA STARTADRESS+1,Y STA STARTMACHINE+2 CMP #$FF BEQ *+5 INC DECIDESTART+1 LDA ROMADRES+1,Y PHA LSR LSR LSR LSR LSR TAX STX BANK LDA BANKS,X ; get banknumber from startadress in ROM STA BANKNOW PLA TAX AND #$1F ORA #$80 STA LAAD+2 ;LENGTH OF FILE IN BLOCKS ; +1 FOR COPIER LDA ROMADRES+3,Y SEC SBC ROMADRES+1,Y CLC ADC #1 STA FILEEND+1 ldx BANK lda INITONE,x sta STARTPROGRAM+1 lda CLISEI,x sta SEICLI ;CALCULATE $2D/2E LDA ROMADRES+2,Y SEC SBC ROMADRES,Y TAX LDA ROMADRES+3,Y SBC ROMADRES+1,Y PHA TXA CLC ADC LOADADRESS,Y STA BSCENDL+1 PLA ADC LOADADRESS+1,Y STA BSCENDH+1 ;LOAD XVALUE FOR COPIER LDX ROMADRES,Y STX XVALUE+1 JMP SCREENROUTINE ENDBOOT: .pseudopc $0100 ;======================================= SCREENROUTINE: LDA #$37 STA $01 jsr resetmachine JSR $E422 LDX #$FB TXS SEI XVALUE: LDX #$00 LDY #0 STY COPIEDBLOCKS COPYLOOP: LDA #$37 ;CHOOSE BANK STA $01 LDA BANKNOW STA $DE00 LAAD: LDA $1000,X PHA ;ROM OFF LDA #$0A STA $DE00 LDA #$30 STA $01 PLA SCHRIJF: STA $1000,Y INY BNE BLOCKMORE INC SCHRIJF+2 INC COPIEDBLOCKS LDA COPIEDBLOCKS FILEEND: CMP #0 BEQ STARTPROGRAM ;CHECK OF FILE AFGELOPEN BLOCKMORE: INX BNE COPYLOOP INC LAAD+2 LDA LAAD+2 CMP #$A0 BNE COPYLOOP ;NIEUWE BANK!! LDA #$80 STA LAAD+2 INC BANK LDX BANK LDA BANKS,X STA BANKNOW LDX #0 BEQ COPYLOOP BSCENDL: LDA #$00 STA $2D STA $AE BSCENDH: LDA #$10 STA $2E STA $AF STARTPROGRAM: LDA #$37 STA $01 ; INITS SEICLI: CLI ; SEI? OPTION? DECIDESTART: LDX #$00 BEQ STARTBASIC STARTMACHINE: JMP $1000 ;------------------------ ;START BASIC!!!!!!!!!!!!! ;------------------------ STARTBASIC: ; LDA #$08 ;ONLY FOR BASIC!! ; STA $0802 ;ONLY FOR BASIC!! LDX #$01 STX $2B LDA #$08 STA $2C JSR $A533 LDA #0 JSR $A871 JMP $A7AE BANK: .db 0 BANKNOW: .db 0 BANKS: .db $00,$08,$10,$18 .db $80,$88,$90,$98 ; .db $0A,$0A,$0A,$0A ; .db $0A,$0A,$0A,$0A ;$0A -> ROM OFF .realpc ENDCOPY: ;--------------------------------------------------- .db 0 ; ENDE