Advertisement
Guest User

Untitled

a guest
Apr 8th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Rom selector for 7 Kernal Mod - I.R.on
  2. ; 09/04/2018 - Istanbul
  3.  
  4. RESET_HANDLER           = $FCE2
  5. CHROUT      = $FFD2
  6.  
  7. ;Zero page addresses used to address screen
  8. COLLOW      = $FB
  9. COLHIGH     = $FC
  10.  
  11. ;Zero page addresses used to access file names
  12. NAMELOW     = $FD
  13. NAMEHIGH    = $FE
  14.  
  15.  
  16.  
  17. ;-- Complex Interface Adapter -------------------
  18.  
  19. CIA_1_BASE              = $DC00
  20. CIA_2_BASE              = $DD00
  21.  
  22. PORT_A                  = $00
  23. PORT_B                  = $01
  24.  
  25. TIMER_A_TOGGLE_BIT      = 64
  26.  
  27. TIMER_A_LO              = $04
  28. TIMER_A_HI              = $05
  29.  
  30. ;-- CIA Registers
  31. CIA_INT_MASK            = $0D
  32. CIA_TIMER_A_CTRL        = $0E
  33. CIA_TIMER_B_CTRL        = $0F
  34.  
  35. ;-- CIA Enums
  36. CRA_TOD_IN_50HZ         = 128
  37. CRA_SP_MODE_OUTPUT      = 64
  38. CRA_IN_MODE_CNT         = 32
  39. CRA_FORCE_LOAD          = 16
  40. CRA_RUN_MODE_ONE_SHOT   = 8
  41. CRA_OUT_MODE_TOGGLE     = 4
  42. CRA_PB6_ON              = 2
  43. CRA_START               = 1
  44.  
  45. ;-- Video Interface Chip ------------------------
  46. VIC_CONTROL_1           = $D011
  47. VIC_INT_CONTROL         = $D01A
  48. VIC_INT_ACK             = $D019
  49. VIC_BORDER_COLOR        = $D020
  50. VIC_SCREEN_COLOR        = $D021
  51.  
  52. ;-- VIC Enums
  53. VIC_DEN                 = 16   
  54.  
  55. ;--
  56. PROCESSOR_PORT          = $01
  57. PP_CONFIG_ALL_RAM       = $34           ; RAM visible in $A000-$BFFF, $E000-$FFFF, $D000-$DFFF
  58. PP_CONFIG_RAM_ON_ROM    = $35           ; RAM visible in $A000-$BFFF, $E000-$FFFF
  59. PP_CONFIG_RAM_ON_BASIC  = $36           ; RAM visible in $A000-$BFFF
  60. PP_CONFIG_DEFAULT       = $37           ; $A000-$BFFF, $E000-$FFFF is ROM, default config.
  61.  
  62.  
  63.     *=$080E    
  64.    
  65.     SEI
  66.     JSR INIT   
  67.     JSR PRINTTITLE     
  68.     JSR PRINTPAGE      
  69.     LDX #$00        ;Puts the selector
  70.     JSR SETCURRENTROWHEAD   ;to the first entry in the
  71.     JSR SETARROW        ;list  
  72.    
  73. INPUT_GET  
  74.     JSR minikey
  75.     BEQ INPUT_GET       ; If zero then no key is pressed so repeat
  76.     CMP LAST_KEY_PRESSED
  77.     BEQ INPUT_GET
  78.     STA LAST_KEY_PRESSED
  79.    
  80.     CMP #$05        ; IF it's a + character
  81.     BEQ UP          ; Then continue iterate up in the menu
  82.     CMP #$35        ; IF it's a - character
  83.     BEQ DOWN        ; Then continue iterate down in the menu
  84.     CMP #$10        ; IF it's ENTER character
  85.     BEQ ENTER       ; Then launch the selected item
  86.     JMP INPUT_GET       ; If other key then leave control to the main loop
  87.            
  88. UP 
  89.     JSR GETCURRENTROW
  90.     JSR CLEARARROW
  91.     TXA
  92.     BNE NORMALUP
  93.     LDX CURPAGEITEMS
  94. NORMALUP   
  95.     DEX
  96.     JSR SETCURRENTROWHEAD  
  97.     JSR SETARROW
  98.     JMP INPUT_GET
  99.  
  100. DOWN
  101.     JSR GETCURRENTROW  
  102.     JSR CLEARARROW
  103.     INX
  104.     CPX CURPAGEITEMS
  105.     BNE ROLLINGDOWN
  106.     LDX #$00
  107. ROLLINGDOWN
  108.     JSR SETCURRENTROWHEAD
  109.     JSR SETARROW
  110.     JMP INPUT_GET  
  111.  
  112.  
  113. ENTER      
  114.     JSR GETCURRENTROW
  115.     JSR SwitchRom  
  116.    
  117. LOOP:
  118.     INC VIC_BORDER_COLOR
  119.     JMP LOOP
  120.    
  121. ;----------- Utility routines ----------------------
  122.  
  123.  
  124. INIT        ; Input : None, Changed : A
  125.     CLD
  126.     LDA #$93
  127.     JSR CHROUT
  128.     LDA #$00
  129.     STA VIC_SCREEN_COLOR
  130.     STA VIC_BORDER_COLOR
  131.     JSR IRQ_DisableInterrupts
  132.     LDA #$00
  133.     STA CIA_1_BASE + TIMER_A_LO
  134.    
  135.     RTS
  136.  
  137.  
  138. SwitchRom
  139.     JSR IRQ_DisableDisplay
  140.    
  141.     LDY #$FF
  142. -  
  143.     DEY
  144.     BNE -
  145.  
  146.     LDA #$64
  147.     JSR IRQ_Send
  148.    
  149.     LDA #$46
  150.     JSR IRQ_Send   
  151.    
  152.     LDA #$17
  153.     JSR IRQ_Send   
  154.    
  155.     TXA
  156.     JSR IRQ_Send
  157.  
  158.     LDY #$FF
  159. -  
  160.     DEY
  161.     BNE -
  162.     JMP $FCE2
  163.    
  164.     RTS
  165.    
  166. ;-----------------------------------------
  167. ; Registers In : None
  168. ; Registers Used : A
  169. ;----------------------------------------- 
  170. IRQ_DisableDisplay
  171.     LDA VIC_CONTROL_1
  172.     AND #$EF
  173.     STA VIC_CONTROL_1  
  174.     RTS
  175.    
  176. ;-----------------------------------------
  177. ; Registers In : None
  178. ; Registers Used : A
  179. ;----------------------------------------- 
  180. IRQ_EnableDisplay
  181.     LDA VIC_CONTROL_1
  182.     ORA #VIC_DEN
  183.     STA VIC_CONTROL_1  
  184.     RTS
  185.  
  186. ;-----------------------------------------
  187. ; Registers In : None
  188. ; Registers Used : A
  189. ;----------------------------------------- 
  190. IRQ_EnableRasterInterrupts
  191.     LDA #$01
  192.     STA VIC_INT_CONTROL ;Enable raster interrupts
  193.     RTS
  194.  
  195. ;-----------------------------------------
  196. ; Registers In : None
  197. ; Registers Used : A
  198. ;----------------------------------------- 
  199. IRQ_DisableVICInterrupts
  200.     ASL VIC_INT_ACK
  201.     LDA #$00
  202.     STA VIC_INT_CONTROL
  203.     RTS
  204.  
  205. ;-----------------------------------------
  206. ; Registers In : None
  207. ; Registers Used : A
  208. ;----------------------------------------- 
  209. IRQ_DisableCIAInterrupts
  210.     LDA #$7f                        ; $7f = %01111111
  211.     STA CIA_1_BASE + CIA_INT_MASK   ; Turn off CIA 1 interrupts
  212.     STA CIA_2_BASE + CIA_INT_MASK   ; Turn off CIA 2 interrupts    
  213.     LDA CIA_1_BASE + CIA_INT_MASK   ; cancel all CIA-IRQs in queue/unprocessed
  214.     LDA CIA_2_BASE + CIA_INT_MASK   ; cancel all CIA-IRQs in queue/unprocessed
  215.     RTS
  216.    
  217. ;-----------------------------------------
  218. ; Registers In : None
  219. ; Registers Used : A
  220. ;----------------------------------------- 
  221. IRQ_DisableInterrupts
  222.     JSR IRQ_DisableVICInterrupts
  223.     JSR IRQ_DisableCIAInterrupts
  224.     RTS
  225.    
  226.  
  227.    
  228. ;-----------------------------------------
  229. ;Registers In : A (Byte to send)
  230. ;Registers Used : X
  231. ;-----------------------------------------
  232. IRQ_SendBit
  233.     ;JSR IRQ_Wait
  234.     LSR
  235.     BCC +
  236.     LDX #$4
  237.     BNE _continue                   ; Fake unconditional jump, to make code relocatable.
  238. +
  239.     LDX #$2
  240. _continue
  241.     PHA
  242.    
  243.     STX VIC_SCREEN_COLOR
  244. ; Interrupt 1  
  245.     LDA $F000                       ; Cause interrupt on Attiny85
  246.    
  247. ;   LDY #$40
  248. ; Loop for debugging   
  249.    
  250. AGAIN
  251.    
  252.     LDA CIA_1_BASE + PORT_B
  253.     AND #TIMER_A_TOGGLE_BIT
  254.     STA ToggleCondition
  255. ; Wait either 512 or 1024 cycles to send 0 or 1
  256.     STX CIA_1_BASE + TIMER_A_HI
  257.     LDA #(CRA_FORCE_LOAD + CRA_RUN_MODE_ONE_SHOT + CRA_START + CRA_PB6_ON + CRA_OUT_MODE_TOGGLE )
  258.     STA CIA_1_BASE + CIA_TIMER_A_CTRL  
  259. -  
  260.     LDA CIA_1_BASE + PORT_B
  261.     AND #TIMER_A_TOGGLE_BIT
  262.     CMP ToggleCondition
  263.     BEQ -
  264.    
  265. ;   DEY
  266. ;   BNE AGAIN
  267.    
  268. ; Loop for debugging   
  269.    
  270. ; Interrupt 2
  271.     LDA $F000
  272.     LDX #0
  273.     STX VIC_SCREEN_COLOR
  274.    
  275.        
  276.     PLA
  277.     RTS
  278.    
  279.    
  280. ToggleCondition                 .BYTE   0
  281.  
  282.  
  283.  
  284. ;----------- API routines ----------------------
  285.    
  286.  
  287.  
  288. ; We will send
  289. ; long interval Kernal Accesses for transmitting 1
  290. ; short interval Kernal Accesses for transmitting 0
  291. ; The idea here is : Receiver will measure the signal on /OE line.
  292. ; It will measure how long the signal is kept high between two low states. (L/H/L) __|''|__
  293. ; If its in the range say N-Epsilon, N+Epsilon than c64 is transmitting a ZERO
  294. ; If its in the range say N*2-Epsilon, N*2+Epsilon than c64 is transmitting a ONE
  295. ;-----------------------------------------
  296. ; Registers In : A (Byte to send)
  297. ; Registers Used : X
  298. ;-----------------------------------------
  299. IRQ_Send
  300.     JSR IRQ_SendBit
  301.     JSR IRQ_SendBit
  302.     JSR IRQ_SendBit
  303.     JSR IRQ_SendBit
  304.     JSR IRQ_SendBit
  305.     JSR IRQ_SendBit
  306.     JSR IRQ_SendBit
  307.     JSR IRQ_SendBit
  308.     RTS
  309.  
  310.  
  311. IRQ_Wait   
  312.     LDX #$FF
  313.     LDY #$00
  314.     STY VIC_SCREEN_COLOR
  315. MLO
  316.     LDY #$FF
  317. -  
  318.     NOP
  319.     NOP
  320.     NOP
  321.     NOP
  322.     DEY
  323.     BNE -
  324.    
  325.     DEX
  326.     BNE MLO    
  327.     RTS
  328.  
  329. SETARROW    ; Input : X (current row), Changed : A, Y
  330.     LDY #$00
  331.     LDA #$3E    ; > sign
  332.     STA (COLLOW),Y
  333.     RTS
  334.  
  335. CLEARARROW  ; Input : X (current row), Changed : A, Y
  336.     LDY #$00
  337.     LDA #$20    ; Space
  338.     STA (COLLOW),Y
  339.     RTS
  340.    
  341. SETCURRENTROW   ; Input : X (current row), Changed : None
  342.     PHA
  343.     STX CURRENTROW
  344.     TXA
  345.     PHA
  346.     ASL
  347.     TAX
  348.     LDA COLS+2,X
  349.     STA COLLOW
  350.     INX
  351.     LDA COLS+2,X
  352.     STA COLHIGH
  353.     PLA
  354.     TAX
  355.     PLA
  356.     RTS
  357.    
  358. SETCURRENTROWHEAD ; Input : X (current row), Changed : None
  359.     PHA
  360.     STX CURRENTROW
  361.     TXA
  362.     PHA
  363.     ASL
  364.     TAX
  365.     LDA COLS+2,X
  366.     CLC
  367.     SBC #01
  368.     STA COLLOW
  369.     INX
  370.     LDA COLS+2,X
  371.     STA COLHIGH
  372.     PLA
  373.     TAX
  374.     PLA
  375.     RTS
  376.        
  377. GETCURRENTROW   ; Input : None, Output : X (current row)
  378.     LDX CURRENTROW
  379.     RTS
  380.  
  381. PRINTFILENAME   ; Input : None, Changed: Y, A
  382.     LDY #$00
  383. FILENAMEPRINT  
  384.     LDA (NAMELOW), Y
  385.     BNE NOTEND
  386.     LDA #$20
  387. NOTEND 
  388.     CMP #$3F
  389.     BMI SYMBOL
  390.     CLC
  391.     SBC #$3f
  392. SYMBOL 
  393.     STA (COLLOW), Y
  394.     INY
  395.     CPY #$20
  396.     BNE FILENAMEPRINT
  397.     RTS
  398.  
  399. CLEARLINE   ; Input : None, Changed: Y, A
  400.     LDY #$00
  401.     LDA #$20   
  402. ICLEARLINE     
  403.     STA (COLLOW), Y
  404.     INY
  405.     CPY #$20
  406.     BNE ICLEARLINE
  407.     RTS
  408.  
  409.    
  410. PRINTTITLE  ; Input : None, Changed : A, X
  411.     LDX #$00
  412. NEXTCHAR   
  413.     LDA TITLE, X
  414.     BEQ OUTTITLEPRINT
  415.     CMP #$3F
  416.     BMI NOTSPACE
  417.     CLC
  418.     SBC #$3f
  419. NOTSPACE   
  420.     STA $0408, X
  421.     INX
  422.     BNE NEXTCHAR
  423. OUTTITLEPRINT
  424.     RTS
  425.        
  426.    
  427. PRINTPAGE   ; Input : None, Changed : A, X, Y
  428.     LDA CURPAGENAMELOW
  429.     STA NAMELOW
  430.     LDA CURPAGENAMEHIGH
  431.     STA NAMEHIGH
  432.  
  433.     LDX #$00
  434. SETCOL 
  435.     JSR SETCURRENTROW
  436.  
  437.     JSR PRINTFILENAME
  438.    
  439.     INX
  440.     CPX CURPAGEITEMS
  441.     BEQ FINISH 
  442.     LDA NAMELOW
  443.     CLC
  444.     ADC #$20
  445.     STA NAMELOW
  446.     BCC NEXTFILE
  447.     INC NAMEHIGH
  448. NEXTFILE
  449.     JMP SETCOL 
  450. FINISH
  451.     CPX #$14
  452.     BEQ ACTUALFINISH
  453.     JSR SETCURRENTROW
  454.     JSR CLEARLINE
  455.     INX
  456.     CLV
  457.     BVC FINISH
  458.    
  459. ACTUALFINISH   
  460.  
  461.     RTS
  462.    
  463. minikey:
  464.     lda #$0
  465.     sta $dc03   ; port b ddr (input)
  466.     lda #$ff
  467.     sta $dc02   ; port a ddr (output)
  468.            
  469.     lda #$00
  470.     sta $dc00   ; port a
  471.     lda $dc01       ; port b
  472.     cmp #$ff
  473.     beq nokey
  474.     ; got column
  475.     tay
  476.            
  477.     lda #$7f
  478.     sta nokey2+1
  479.     ldx #8
  480. nokey2:
  481.     lda #0
  482.     sta $dc00   ; port a
  483.    
  484.     sec
  485.     ror nokey2+1
  486.     dex
  487.     bmi nokey
  488.            
  489.     lda $dc01       ; port b
  490.     cmp #$ff
  491.     beq nokey2
  492.            
  493.     ; got row in X
  494.     txa
  495.     ora columntab,y
  496.     sec
  497.     rts
  498.            
  499. nokey:
  500.     clc
  501.     rts
  502.  
  503. columntab:
  504. .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
  505. .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
  506. .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
  507. .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
  508. .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
  509. .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
  510. .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
  511. .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
  512.  
  513.  
  514. LAST_KEY_PRESSED .BYTE 0
  515. COMMANDBYTE .BYTE 0
  516. COMMANDARG  .BYTE 0, 0, 0, 0
  517. CURRENTROW  .BYTE 0
  518. CURPAGENAMELOW  .BYTE <GAMELIST
  519. CURPAGENAMEHIGH .BYTE >GAMELIST
  520.  
  521. COLS   
  522.     .WORD $0404, $042C, $0454, $047C, $04A4, $04CC, $04F4, $051C, $0544, $056C
  523.     .WORD $0594, $05BC, $05E4, $060C, $0634, $065C, $0684, $06AC, $06D4, $06FC
  524.     .WORD $0724, $074C, $0774, $079C, $07C4
  525.    
  526. -       = GAMELIST + range(0, 640, 32)
  527. NAMESLO   .byte <(-)
  528. NAMESHI   .byte >(-)
  529.    
  530. TITLE  
  531.     .TEXT "7KERNAL MOD KERNAL LIST"
  532.     .BYTE 0
  533.    
  534. CURPAGEITEMS   
  535.             .BYTE 7
  536. PAGECOUNT  
  537.             .BYTE 1
  538. CURPAGEINDEX   
  539.             .BYTE 1
  540.  
  541. GAMELIST     
  542.             .TEXT "STOCK KERNAL                   "
  543.             .BYTE 0
  544.             .TEXT "COCKROACH TURBO ROM            "
  545.             .BYTE 0
  546.             .TEXT "DATEL TURBO ROM                "
  547.             .BYTE 0
  548.             .TEXT "EXOS V4                        "
  549.             .BYTE 0        
  550.             .TEXT "SD2IEC 2.2                     "
  551.             .BYTE 0                    
  552.             .TEXT "DEAD TEST CARTRIDGE            "
  553.             .BYTE 0
  554.             .TEXT "STOCK KERNAL                   "
  555.             .BYTE 0
  556.             .TEXT "STOCK KERNAL                   "
  557.             .BYTE 0
  558.             .TEXT "STOCK KERNAL                   "
  559.             .BYTE 0        
  560.             .TEXT "STOCK KERNAL                   "
  561.             .BYTE 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement