Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Rom selector for 7 Kernal Mod - I.R.on
- ; 09/04/2018 - Istanbul
- RESET_HANDLER = $FCE2
- CHROUT = $FFD2
- ;Zero page addresses used to address screen
- COLLOW = $FB
- COLHIGH = $FC
- ;Zero page addresses used to access file names
- NAMELOW = $FD
- NAMEHIGH = $FE
- ;-- Complex Interface Adapter -------------------
- CIA_1_BASE = $DC00
- CIA_2_BASE = $DD00
- PORT_A = $00
- PORT_B = $01
- TIMER_A_TOGGLE_BIT = 64
- TIMER_A_LO = $04
- TIMER_A_HI = $05
- ;-- CIA Registers
- CIA_INT_MASK = $0D
- CIA_TIMER_A_CTRL = $0E
- CIA_TIMER_B_CTRL = $0F
- ;-- CIA Enums
- CRA_TOD_IN_50HZ = 128
- CRA_SP_MODE_OUTPUT = 64
- CRA_IN_MODE_CNT = 32
- CRA_FORCE_LOAD = 16
- CRA_RUN_MODE_ONE_SHOT = 8
- CRA_OUT_MODE_TOGGLE = 4
- CRA_PB6_ON = 2
- CRA_START = 1
- ;-- Video Interface Chip ------------------------
- VIC_CONTROL_1 = $D011
- VIC_INT_CONTROL = $D01A
- VIC_INT_ACK = $D019
- VIC_BORDER_COLOR = $D020
- VIC_SCREEN_COLOR = $D021
- ;-- VIC Enums
- VIC_DEN = 16
- ;--
- PROCESSOR_PORT = $01
- PP_CONFIG_ALL_RAM = $34 ; RAM visible in $A000-$BFFF, $E000-$FFFF, $D000-$DFFF
- PP_CONFIG_RAM_ON_ROM = $35 ; RAM visible in $A000-$BFFF, $E000-$FFFF
- PP_CONFIG_RAM_ON_BASIC = $36 ; RAM visible in $A000-$BFFF
- PP_CONFIG_DEFAULT = $37 ; $A000-$BFFF, $E000-$FFFF is ROM, default config.
- *=$080E
- SEI
- JSR INIT
- JSR PRINTTITLE
- JSR PRINTPAGE
- LDX #$00 ;Puts the selector
- JSR SETCURRENTROWHEAD ;to the first entry in the
- JSR SETARROW ;list
- INPUT_GET
- JSR minikey
- BEQ INPUT_GET ; If zero then no key is pressed so repeat
- CMP LAST_KEY_PRESSED
- BEQ INPUT_GET
- STA LAST_KEY_PRESSED
- CMP #$05 ; IF it's a + character
- BEQ UP ; Then continue iterate up in the menu
- CMP #$35 ; IF it's a - character
- BEQ DOWN ; Then continue iterate down in the menu
- CMP #$10 ; IF it's ENTER character
- BEQ ENTER ; Then launch the selected item
- JMP INPUT_GET ; If other key then leave control to the main loop
- UP
- JSR GETCURRENTROW
- JSR CLEARARROW
- TXA
- BNE NORMALUP
- LDX CURPAGEITEMS
- NORMALUP
- DEX
- JSR SETCURRENTROWHEAD
- JSR SETARROW
- JMP INPUT_GET
- DOWN
- JSR GETCURRENTROW
- JSR CLEARARROW
- INX
- CPX CURPAGEITEMS
- BNE ROLLINGDOWN
- LDX #$00
- ROLLINGDOWN
- JSR SETCURRENTROWHEAD
- JSR SETARROW
- JMP INPUT_GET
- ENTER
- JSR GETCURRENTROW
- JSR SwitchRom
- LOOP:
- INC VIC_BORDER_COLOR
- JMP LOOP
- ;----------- Utility routines ----------------------
- INIT ; Input : None, Changed : A
- CLD
- LDA #$93
- JSR CHROUT
- LDA #$00
- STA VIC_SCREEN_COLOR
- STA VIC_BORDER_COLOR
- JSR IRQ_DisableInterrupts
- LDA #$00
- STA CIA_1_BASE + TIMER_A_LO
- RTS
- SwitchRom
- JSR IRQ_DisableDisplay
- LDY #$FF
- -
- DEY
- BNE -
- LDA #$64
- JSR IRQ_Send
- LDA #$46
- JSR IRQ_Send
- LDA #$17
- JSR IRQ_Send
- TXA
- JSR IRQ_Send
- LDY #$FF
- -
- DEY
- BNE -
- JMP $FCE2
- RTS
- ;-----------------------------------------
- ; Registers In : None
- ; Registers Used : A
- ;-----------------------------------------
- IRQ_DisableDisplay
- LDA VIC_CONTROL_1
- AND #$EF
- STA VIC_CONTROL_1
- RTS
- ;-----------------------------------------
- ; Registers In : None
- ; Registers Used : A
- ;-----------------------------------------
- IRQ_EnableDisplay
- LDA VIC_CONTROL_1
- ORA #VIC_DEN
- STA VIC_CONTROL_1
- RTS
- ;-----------------------------------------
- ; Registers In : None
- ; Registers Used : A
- ;-----------------------------------------
- IRQ_EnableRasterInterrupts
- LDA #$01
- STA VIC_INT_CONTROL ;Enable raster interrupts
- RTS
- ;-----------------------------------------
- ; Registers In : None
- ; Registers Used : A
- ;-----------------------------------------
- IRQ_DisableVICInterrupts
- ASL VIC_INT_ACK
- LDA #$00
- STA VIC_INT_CONTROL
- RTS
- ;-----------------------------------------
- ; Registers In : None
- ; Registers Used : A
- ;-----------------------------------------
- IRQ_DisableCIAInterrupts
- LDA #$7f ; $7f = %01111111
- STA CIA_1_BASE + CIA_INT_MASK ; Turn off CIA 1 interrupts
- STA CIA_2_BASE + CIA_INT_MASK ; Turn off CIA 2 interrupts
- LDA CIA_1_BASE + CIA_INT_MASK ; cancel all CIA-IRQs in queue/unprocessed
- LDA CIA_2_BASE + CIA_INT_MASK ; cancel all CIA-IRQs in queue/unprocessed
- RTS
- ;-----------------------------------------
- ; Registers In : None
- ; Registers Used : A
- ;-----------------------------------------
- IRQ_DisableInterrupts
- JSR IRQ_DisableVICInterrupts
- JSR IRQ_DisableCIAInterrupts
- RTS
- ;-----------------------------------------
- ;Registers In : A (Byte to send)
- ;Registers Used : X
- ;-----------------------------------------
- IRQ_SendBit
- ;JSR IRQ_Wait
- LSR
- BCC +
- LDX #$4
- BNE _continue ; Fake unconditional jump, to make code relocatable.
- +
- LDX #$2
- _continue
- PHA
- STX VIC_SCREEN_COLOR
- ; Interrupt 1
- LDA $F000 ; Cause interrupt on Attiny85
- ; LDY #$40
- ; Loop for debugging
- AGAIN
- LDA CIA_1_BASE + PORT_B
- AND #TIMER_A_TOGGLE_BIT
- STA ToggleCondition
- ; Wait either 512 or 1024 cycles to send 0 or 1
- STX CIA_1_BASE + TIMER_A_HI
- LDA #(CRA_FORCE_LOAD + CRA_RUN_MODE_ONE_SHOT + CRA_START + CRA_PB6_ON + CRA_OUT_MODE_TOGGLE )
- STA CIA_1_BASE + CIA_TIMER_A_CTRL
- -
- LDA CIA_1_BASE + PORT_B
- AND #TIMER_A_TOGGLE_BIT
- CMP ToggleCondition
- BEQ -
- ; DEY
- ; BNE AGAIN
- ; Loop for debugging
- ; Interrupt 2
- LDA $F000
- LDX #0
- STX VIC_SCREEN_COLOR
- PLA
- RTS
- ToggleCondition .BYTE 0
- ;----------- API routines ----------------------
- ; We will send
- ; long interval Kernal Accesses for transmitting 1
- ; short interval Kernal Accesses for transmitting 0
- ; The idea here is : Receiver will measure the signal on /OE line.
- ; It will measure how long the signal is kept high between two low states. (L/H/L) __|''|__
- ; If its in the range say N-Epsilon, N+Epsilon than c64 is transmitting a ZERO
- ; If its in the range say N*2-Epsilon, N*2+Epsilon than c64 is transmitting a ONE
- ;-----------------------------------------
- ; Registers In : A (Byte to send)
- ; Registers Used : X
- ;-----------------------------------------
- IRQ_Send
- JSR IRQ_SendBit
- JSR IRQ_SendBit
- JSR IRQ_SendBit
- JSR IRQ_SendBit
- JSR IRQ_SendBit
- JSR IRQ_SendBit
- JSR IRQ_SendBit
- JSR IRQ_SendBit
- RTS
- IRQ_Wait
- LDX #$FF
- LDY #$00
- STY VIC_SCREEN_COLOR
- MLO
- LDY #$FF
- -
- NOP
- NOP
- NOP
- NOP
- DEY
- BNE -
- DEX
- BNE MLO
- RTS
- SETARROW ; Input : X (current row), Changed : A, Y
- LDY #$00
- LDA #$3E ; > sign
- STA (COLLOW),Y
- RTS
- CLEARARROW ; Input : X (current row), Changed : A, Y
- LDY #$00
- LDA #$20 ; Space
- STA (COLLOW),Y
- RTS
- SETCURRENTROW ; Input : X (current row), Changed : None
- PHA
- STX CURRENTROW
- TXA
- PHA
- ASL
- TAX
- LDA COLS+2,X
- STA COLLOW
- INX
- LDA COLS+2,X
- STA COLHIGH
- PLA
- TAX
- PLA
- RTS
- SETCURRENTROWHEAD ; Input : X (current row), Changed : None
- PHA
- STX CURRENTROW
- TXA
- PHA
- ASL
- TAX
- LDA COLS+2,X
- CLC
- SBC #01
- STA COLLOW
- INX
- LDA COLS+2,X
- STA COLHIGH
- PLA
- TAX
- PLA
- RTS
- GETCURRENTROW ; Input : None, Output : X (current row)
- LDX CURRENTROW
- RTS
- PRINTFILENAME ; Input : None, Changed: Y, A
- LDY #$00
- FILENAMEPRINT
- LDA (NAMELOW), Y
- BNE NOTEND
- LDA #$20
- NOTEND
- CMP #$3F
- BMI SYMBOL
- CLC
- SBC #$3f
- SYMBOL
- STA (COLLOW), Y
- INY
- CPY #$20
- BNE FILENAMEPRINT
- RTS
- CLEARLINE ; Input : None, Changed: Y, A
- LDY #$00
- LDA #$20
- ICLEARLINE
- STA (COLLOW), Y
- INY
- CPY #$20
- BNE ICLEARLINE
- RTS
- PRINTTITLE ; Input : None, Changed : A, X
- LDX #$00
- NEXTCHAR
- LDA TITLE, X
- BEQ OUTTITLEPRINT
- CMP #$3F
- BMI NOTSPACE
- CLC
- SBC #$3f
- NOTSPACE
- STA $0408, X
- INX
- BNE NEXTCHAR
- OUTTITLEPRINT
- RTS
- PRINTPAGE ; Input : None, Changed : A, X, Y
- LDA CURPAGENAMELOW
- STA NAMELOW
- LDA CURPAGENAMEHIGH
- STA NAMEHIGH
- LDX #$00
- SETCOL
- JSR SETCURRENTROW
- JSR PRINTFILENAME
- INX
- CPX CURPAGEITEMS
- BEQ FINISH
- LDA NAMELOW
- CLC
- ADC #$20
- STA NAMELOW
- BCC NEXTFILE
- INC NAMEHIGH
- NEXTFILE
- JMP SETCOL
- FINISH
- CPX #$14
- BEQ ACTUALFINISH
- JSR SETCURRENTROW
- JSR CLEARLINE
- INX
- CLV
- BVC FINISH
- ACTUALFINISH
- RTS
- minikey:
- lda #$0
- sta $dc03 ; port b ddr (input)
- lda #$ff
- sta $dc02 ; port a ddr (output)
- lda #$00
- sta $dc00 ; port a
- lda $dc01 ; port b
- cmp #$ff
- beq nokey
- ; got column
- tay
- lda #$7f
- sta nokey2+1
- ldx #8
- nokey2:
- lda #0
- sta $dc00 ; port a
- sec
- ror nokey2+1
- dex
- bmi nokey
- lda $dc01 ; port b
- cmp #$ff
- beq nokey2
- ; got row in X
- txa
- ora columntab,y
- sec
- rts
- nokey:
- clc
- rts
- columntab:
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $70
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $60
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $50
- .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,$FF, $FF, $FF, $FF,$FF, $FF, $FF, $40,$FF, $FF, $FF, $FF, $FF, $FF, $FF, $30,$FF, $FF, $FF, $20,$FF, $10, $00, $FF
- LAST_KEY_PRESSED .BYTE 0
- COMMANDBYTE .BYTE 0
- COMMANDARG .BYTE 0, 0, 0, 0
- CURRENTROW .BYTE 0
- CURPAGENAMELOW .BYTE <GAMELIST
- CURPAGENAMEHIGH .BYTE >GAMELIST
- COLS
- .WORD $0404, $042C, $0454, $047C, $04A4, $04CC, $04F4, $051C, $0544, $056C
- .WORD $0594, $05BC, $05E4, $060C, $0634, $065C, $0684, $06AC, $06D4, $06FC
- .WORD $0724, $074C, $0774, $079C, $07C4
- - = GAMELIST + range(0, 640, 32)
- NAMESLO .byte <(-)
- NAMESHI .byte >(-)
- TITLE
- .TEXT "7KERNAL MOD KERNAL LIST"
- .BYTE 0
- CURPAGEITEMS
- .BYTE 7
- PAGECOUNT
- .BYTE 1
- CURPAGEINDEX
- .BYTE 1
- GAMELIST
- .TEXT "STOCK KERNAL "
- .BYTE 0
- .TEXT "COCKROACH TURBO ROM "
- .BYTE 0
- .TEXT "DATEL TURBO ROM "
- .BYTE 0
- .TEXT "EXOS V4 "
- .BYTE 0
- .TEXT "SD2IEC 2.2 "
- .BYTE 0
- .TEXT "DEAD TEST CARTRIDGE "
- .BYTE 0
- .TEXT "STOCK KERNAL "
- .BYTE 0
- .TEXT "STOCK KERNAL "
- .BYTE 0
- .TEXT "STOCK KERNAL "
- .BYTE 0
- .TEXT "STOCK KERNAL "
- .BYTE 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement