Advertisement
Guest User

Untitled

a guest
Apr 8th, 2018
132
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.     TXA
  140.     PHA
  141.     JSR IRQ_DisableDisplay
  142.    
  143.     LDY #$FF
  144. -  
  145.     DEY
  146.     BNE -
  147.  
  148.     LDA #$64
  149.     JSR IRQ_Send
  150.    
  151.     LDA #$46
  152.     JSR IRQ_Send   
  153.    
  154.     LDA #$17
  155.     JSR IRQ_Send   
  156.    
  157.     PLA
  158.     JSR IRQ_Send
  159.  
  160.     LDY #$FF
  161. -  
  162.     DEY
  163.     BNE -
  164.     JMP $FCE2
  165.    
  166.     RTS
  167.    
  168. ;-----------------------------------------
  169. ; Registers In : None
  170. ; Registers Used : A
  171. ;----------------------------------------- 
  172. IRQ_DisableDisplay
  173.     LDA VIC_CONTROL_1
  174.     AND #$EF
  175.     STA VIC_CONTROL_1  
  176.     RTS
  177.    
  178. ;-----------------------------------------
  179. ; Registers In : None
  180. ; Registers Used : A
  181. ;----------------------------------------- 
  182. IRQ_EnableDisplay
  183.     LDA VIC_CONTROL_1
  184.     ORA #VIC_DEN
  185.     STA VIC_CONTROL_1  
  186.     RTS
  187.  
  188. ;-----------------------------------------
  189. ; Registers In : None
  190. ; Registers Used : A
  191. ;----------------------------------------- 
  192. IRQ_EnableRasterInterrupts
  193.     LDA #$01
  194.     STA VIC_INT_CONTROL ;Enable raster interrupts
  195.     RTS
  196.  
  197. ;-----------------------------------------
  198. ; Registers In : None
  199. ; Registers Used : A
  200. ;----------------------------------------- 
  201. IRQ_DisableVICInterrupts
  202.     ASL VIC_INT_ACK
  203.     LDA #$00
  204.     STA VIC_INT_CONTROL
  205.     RTS
  206.  
  207. ;-----------------------------------------
  208. ; Registers In : None
  209. ; Registers Used : A
  210. ;----------------------------------------- 
  211. IRQ_DisableCIAInterrupts
  212.     LDA #$7f                        ; $7f = %01111111
  213.     STA CIA_1_BASE + CIA_INT_MASK   ; Turn off CIA 1 interrupts
  214.     STA CIA_2_BASE + CIA_INT_MASK   ; Turn off CIA 2 interrupts    
  215.     LDA CIA_1_BASE + CIA_INT_MASK   ; cancel all CIA-IRQs in queue/unprocessed
  216.     LDA CIA_2_BASE + CIA_INT_MASK   ; cancel all CIA-IRQs in queue/unprocessed
  217.     RTS
  218.    
  219. ;-----------------------------------------
  220. ; Registers In : None
  221. ; Registers Used : A
  222. ;----------------------------------------- 
  223. IRQ_DisableInterrupts
  224.     JSR IRQ_DisableVICInterrupts
  225.     JSR IRQ_DisableCIAInterrupts
  226.     RTS
  227.    
  228.  
  229.    
  230. ;-----------------------------------------
  231. ;Registers In : A (Byte to send)
  232. ;Registers Used : X
  233. ;-----------------------------------------
  234. IRQ_SendBit
  235.     ;JSR IRQ_Wait
  236.     LSR
  237.     BCC +
  238.     LDX #$4
  239.     BNE _continue                   ; Fake unconditional jump, to make code relocatable.
  240. +
  241.     LDX #$2
  242. _continue
  243.     PHA
  244.    
  245.     STX VIC_SCREEN_COLOR
  246. ; Interrupt 1  
  247.     LDA $F000                       ; Cause interrupt on Attiny85
  248.    
  249. ;   LDY #$40
  250. ; Loop for debugging   
  251.    
  252. AGAIN
  253.    
  254.     LDA CIA_1_BASE + PORT_B
  255.     AND #TIMER_A_TOGGLE_BIT
  256.     STA ToggleCondition
  257. ; Wait either 512 or 1024 cycles to send 0 or 1
  258.     STX CIA_1_BASE + TIMER_A_HI
  259.     LDA #(CRA_FORCE_LOAD + CRA_RUN_MODE_ONE_SHOT + CRA_START + CRA_PB6_ON + CRA_OUT_MODE_TOGGLE )
  260.     STA CIA_1_BASE + CIA_TIMER_A_CTRL  
  261. -  
  262.     LDA CIA_1_BASE + PORT_B
  263.     AND #TIMER_A_TOGGLE_BIT
  264.     CMP ToggleCondition
  265.     BEQ -
  266.    
  267. ;   DEY
  268. ;   BNE AGAIN
  269.    
  270. ; Loop for debugging   
  271.    
  272. ; Interrupt 2
  273.     LDA $F000
  274.     LDX #0
  275.     STX VIC_SCREEN_COLOR
  276.    
  277.        
  278.     PLA
  279.     RTS
  280.    
  281.    
  282. ToggleCondition                 .BYTE   0
  283.  
  284.  
  285.  
  286. ;----------- API routines ----------------------
  287.    
  288.  
  289.  
  290. ; We will send
  291. ; long interval Kernal Accesses for transmitting 1
  292. ; short interval Kernal Accesses for transmitting 0
  293. ; The idea here is : Receiver will measure the signal on /OE line.
  294. ; It will measure how long the signal is kept high between two low states. (L/H/L) __|''|__
  295. ; If its in the range say N-Epsilon, N+Epsilon than c64 is transmitting a ZERO
  296. ; If its in the range say N*2-Epsilon, N*2+Epsilon than c64 is transmitting a ONE
  297. ;-----------------------------------------
  298. ; Registers In : A (Byte to send)
  299. ; Registers Used : X
  300. ;-----------------------------------------
  301. IRQ_Send
  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.     JSR IRQ_SendBit
  309.     JSR IRQ_SendBit
  310.     RTS
  311.  
  312.  
  313. IRQ_Wait   
  314.     LDX #$FF
  315.     LDY #$00
  316.     STY VIC_SCREEN_COLOR
  317. MLO
  318.     LDY #$FF
  319. -  
  320.     NOP
  321.     NOP
  322.     NOP
  323.     NOP
  324.     DEY
  325.     BNE -
  326.    
  327.     DEX
  328.     BNE MLO    
  329.     RTS
  330.  
  331. SETARROW    ; Input : X (current row), Changed : A, Y
  332.     LDY #$00
  333.     LDA #$3E    ; > sign
  334.     STA (COLLOW),Y
  335.     RTS
  336.  
  337. CLEARARROW  ; Input : X (current row), Changed : A, Y
  338.     LDY #$00
  339.     LDA #$20    ; Space
  340.     STA (COLLOW),Y
  341.     RTS
  342.    
  343. SETCURRENTROW   ; Input : X (current row), Changed : None
  344.     PHA
  345.     STX CURRENTROW
  346.     TXA
  347.     PHA
  348.     ASL
  349.     TAX
  350.     LDA COLS+2,X
  351.     STA COLLOW
  352.     INX
  353.     LDA COLS+2,X
  354.     STA COLHIGH
  355.     PLA
  356.     TAX
  357.     PLA
  358.     RTS
  359.    
  360. SETCURRENTROWHEAD ; Input : X (current row), Changed : None
  361.     PHA
  362.     STX CURRENTROW
  363.     TXA
  364.     PHA
  365.     ASL
  366.     TAX
  367.     LDA COLS+2,X
  368.     CLC
  369.     SBC #01
  370.     STA COLLOW
  371.     INX
  372.     LDA COLS+2,X
  373.     STA COLHIGH
  374.     PLA
  375.     TAX
  376.     PLA
  377.     RTS
  378.        
  379. GETCURRENTROW   ; Input : None, Output : X (current row)
  380.     LDX CURRENTROW
  381.     RTS
  382.  
  383. PRINTFILENAME   ; Input : None, Changed: Y, A
  384.     LDY #$00
  385. FILENAMEPRINT  
  386.     LDA (NAMELOW), Y
  387.     BNE NOTEND
  388.     LDA #$20
  389. NOTEND 
  390.     CMP #$3F
  391.     BMI SYMBOL
  392.     CLC
  393.     SBC #$3f
  394. SYMBOL 
  395.     STA (COLLOW), Y
  396.     INY
  397.     CPY #$20
  398.     BNE FILENAMEPRINT
  399.     RTS
  400.  
  401. CLEARLINE   ; Input : None, Changed: Y, A
  402.     LDY #$00
  403.     LDA #$20   
  404. ICLEARLINE     
  405.     STA (COLLOW), Y
  406.     INY
  407.     CPY #$20
  408.     BNE ICLEARLINE
  409.     RTS
  410.  
  411.    
  412. PRINTTITLE  ; Input : None, Changed : A, X
  413.     LDX #$00
  414. NEXTCHAR   
  415.     LDA TITLE, X
  416.     BEQ OUTTITLEPRINT
  417.     CMP #$3F
  418.     BMI NOTSPACE
  419.     CLC
  420.     SBC #$3f
  421. NOTSPACE   
  422.     STA $0408, X
  423.     INX
  424.     BNE NEXTCHAR
  425. OUTTITLEPRINT
  426.     RTS
  427.        
  428.    
  429. PRINTPAGE   ; Input : None, Changed : A, X, Y
  430.     LDA CURPAGENAMELOW
  431.     STA NAMELOW
  432.     LDA CURPAGENAMEHIGH
  433.     STA NAMEHIGH
  434.  
  435.     LDX #$00
  436. SETCOL 
  437.     JSR SETCURRENTROW
  438.  
  439.     JSR PRINTFILENAME
  440.    
  441.     INX
  442.     CPX CURPAGEITEMS
  443.     BEQ FINISH 
  444.     LDA NAMELOW
  445.     CLC
  446.     ADC #$20
  447.     STA NAMELOW
  448.     BCC NEXTFILE
  449.     INC NAMEHIGH
  450. NEXTFILE
  451.     JMP SETCOL 
  452. FINISH
  453.     CPX #$14
  454.     BEQ ACTUALFINISH
  455.     JSR SETCURRENTROW
  456.     JSR CLEARLINE
  457.     INX
  458.     CLV
  459.     BVC FINISH
  460.    
  461. ACTUALFINISH   
  462.  
  463.     RTS
  464.    
  465. minikey:
  466.     lda #$0
  467.     sta $dc03   ; port b ddr (input)
  468.     lda #$ff
  469.     sta $dc02   ; port a ddr (output)
  470.            
  471.     lda #$00
  472.     sta $dc00   ; port a
  473.     lda $dc01       ; port b
  474.     cmp #$ff
  475.     beq nokey
  476.     ; got column
  477.     tay
  478.            
  479.     lda #$7f
  480.     sta nokey2+1
  481.     ldx #8
  482. nokey2:
  483.     lda #0
  484.     sta $dc00   ; port a
  485.    
  486.     sec
  487.     ror nokey2+1
  488.     dex
  489.     bmi nokey
  490.            
  491.     lda $dc01       ; port b
  492.     cmp #$ff
  493.     beq nokey2
  494.            
  495.     ; got row in X
  496.     txa
  497.     ora columntab,y
  498.     sec
  499.     rts
  500.            
  501. nokey:
  502.     clc
  503.     rts
  504.  
  505. columntab:
  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, $FF
  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, $70
  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, $FF
  511. .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
  512. .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
  513. .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
  514.  
  515.  
  516. LAST_KEY_PRESSED .BYTE 0
  517. COMMANDBYTE .BYTE 0
  518. COMMANDARG  .BYTE 0, 0, 0, 0
  519. CURRENTROW  .BYTE 0
  520. CURPAGENAMELOW  .BYTE <GAMELIST
  521. CURPAGENAMEHIGH .BYTE >GAMELIST
  522.  
  523. COLS   
  524.     .WORD $0404, $042C, $0454, $047C, $04A4, $04CC, $04F4, $051C, $0544, $056C
  525.     .WORD $0594, $05BC, $05E4, $060C, $0634, $065C, $0684, $06AC, $06D4, $06FC
  526.     .WORD $0724, $074C, $0774, $079C, $07C4
  527.    
  528. -       = GAMELIST + range(0, 640, 32)
  529. NAMESLO   .byte <(-)
  530. NAMESHI   .byte >(-)
  531.    
  532. TITLE  
  533.     .TEXT "7KERNAL MOD KERNAL LIST"
  534.     .BYTE 0
  535.    
  536. CURPAGEITEMS   
  537.             .BYTE 7
  538. PAGECOUNT  
  539.             .BYTE 1
  540. CURPAGEINDEX   
  541.             .BYTE 1
  542.  
  543. GAMELIST     
  544.             .TEXT "STOCK KERNAL                   "
  545.             .BYTE 0
  546.             .TEXT "COCKROACH TURBO ROM            "
  547.             .BYTE 0
  548.             .TEXT "DATEL TURBO ROM                "
  549.             .BYTE 0
  550.             .TEXT "EXOS V4                        "
  551.             .BYTE 0        
  552.             .TEXT "SD2IEC 2.2                     "
  553.             .BYTE 0                    
  554.             .TEXT "DEAD TEST CARTRIDGE            "
  555.             .BYTE 0
  556.             .TEXT "STOCK KERNAL                   "
  557.             .BYTE 0
  558.             .TEXT "STOCK KERNAL                   "
  559.             .BYTE 0
  560.             .TEXT "STOCK KERNAL                   "
  561.             .BYTE 0        
  562.             .TEXT "STOCK KERNAL                   "
  563.             .BYTE 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement