verz

TOD8502z80

Aug 13th, 2020 (edited)
3,115
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *=$1C01
  2.         BYTE    $0B, $1C, $0A, $00, $9E, $37, $31, $38, $31, $00, $00, $00
  3.  
  4.  
  5.         jmp 8502code
  6.  
  7. *=$1c10
  8. z80code
  9.           BYTE $3E,$3F,$32,$00,$FF,$21,$6D,$1C,$11,$4B,$2C,$01
  10.           BYTE $03,$00,$ED,$B0,$01,$0B,$DC,$ED,$78,$0B,$ED,$60
  11.           BYTE $0B,$ED,$68,$0B,$ED,$48,$4F,$11,$20,$2C,$CD,$48
  12.           BYTE $1C,$1F,$3E,$3A,$38,$02,$3E,$20,$11,$22,$2C,$12
  13.           BYTE $11,$25,$2C,$12,$C3,$E0,$FF,$00,$79,$CD,$62,$1C
  14.           BYTE $79,$CD,$66,$1C,$13,$7C,$CD,$62,$1C,$7C,$CD,$66
  15.           BYTE $1C,$13,$7D,$CD,$62,$1C,$7D,$C3,$66,$1C,$1F,$1F
  16.           BYTE $1F,$1F,$E6,$0F,$F6,$30,$12,$13,$C9,$1A,$38,$30
  17.  
  18. ; Lo z80 avvia la macchina; dopodiché attiva l'8502, e resta bloccato
  19. ; al punto in cui aveva eseguito l'attivazione dell'altro ($ffee).
  20. ; All'indirizzo $ffee va inserita un'istruzione JP di salto verso il
  21. ; codice z80 da eseguire
  22. 8502code
  23.         sei
  24.         lda $ff00
  25.         pha
  26.         lda #$c3        ; z80 "JP"
  27.         sta $ffee
  28.         lda #<z80code
  29.         sta $ffef
  30.         lda #>z80code
  31.         sta $fff0
  32.  
  33.         lda #$3e        ; ram+ram+ram+io
  34.         sta $ff00
  35.  
  36.         jsr ClearScreen
  37.  
  38.         lda #$0
  39.         sta $dc08       ; start TOD
  40.  
  41.         lda $d018       ; MemScr -> $2c00
  42.         pha
  43.         and #$0f
  44.         ora #$b0
  45.         sta $d018
  46.  
  47.         ldx #$3         ; "8502" -> Video
  48. lpcpu
  49.         lda cpu,x
  50.         sta $2c2a,x
  51.         dex
  52.         bpl lpcpu
  53.  
  54.  
  55. lpZ80
  56. ;        lda #$3e        ; ram+ram+ram+io
  57. ;        sta $ff00
  58.         lda #$b0
  59.         sta $d505       ; -> z80
  60.         nop
  61.  
  62. ; qui è stato attivato lo z80; quando viene riattivato l'8502 il codice
  63. ; riparte da dove era rimasto bloccato
  64.  
  65.  
  66.         ; z80 -> 8502
  67.         ldx #0          ; TOD 8502
  68.         lda $dc0b       ; HH
  69.         jsr wb
  70.         lda $dc0a       ; MM
  71.         jsr wb
  72.         lda $dc09       ; SS
  73.         jsr wb
  74.         lsr
  75.         lda $dc08       ; restart TOD
  76.         ldx #$3a        ; ":"
  77.         bcc commas
  78.         ldx #$20        ; " "
  79. commas
  80.         stx $2c02       ; " "|":" -> Video
  81.         stx $2c05       ; " "|":" -> Video
  82.  
  83. WaitForSpace
  84.         lda     #%11111111
  85.         sta     $dc02
  86.         lda     #%00000000
  87.         sta     $dc03
  88.         lda     #$7f    ;%01111111 - only row 7 KB matrix
  89.         sta     $dc00
  90.  
  91.         lda     $dc01
  92.         and     #$10    ;mask %00010000
  93.         bne     lpZ80   ;
  94.  
  95. ; ending
  96.         pla        
  97.         sta $d018 ; MemScr -> $0400
  98.         pla
  99.         sta $ff00 ; MemConf -> iniz
  100.         cli
  101.         rts
  102.  
  103.  
  104. cpu
  105.        byte '8502'
  106.  
  107. ;--------------------
  108. wb      tay
  109.         lsr
  110.         lsr
  111.         lsr
  112.         lsr
  113.         ora #$30
  114.         sta $2c00,x
  115.         tya
  116.         and #$0f
  117.         ora #$30
  118.         inx
  119.         sta $2c00,x
  120.         inx
  121.         inx
  122.         rts
  123.  
  124. ;--------------------
  125. ; (z80, $2c00)
  126. ClearScreen
  127.         ldx #250
  128.         lda #$20
  129. lpclr   sta $2c00-  1,x
  130.         sta $2c00+249,x
  131.         sta $2c00+499,x
  132.         sta $2c00+749,x
  133.         dex
  134.         bne lpclr
  135.         rts
  136.  
  137.  
  138.  
  139.  
  140. ; Note: Z80 uses IN and OUT to write to d000h-dfffh
  141. ; that's because that area is IO or Ram  depending on the direction port ($0001) of the 8502,
  142. ; and when z80 is active that port is disabled;
  143. ; so IN and OUT read/write the mapped IO, while LD reads/writes Ram
  144.  
  145.  
  146. ;.org 01c10h
  147.  
  148. ;        LD A, 3Fh               ; ram+ram+ram+ram
  149. ;        LD (0FF00h),A
  150. ;        
  151. ;        ld hl,cpu               ; "Z80" -> Video
  152. ;        ld de,02c4bh
  153. ;        ld bc,3h
  154. ;        ldir
  155.  
  156. ;        ld bc,0dc0bh    ; TOD z80
  157. ;        in a,(C)                ; HH
  158. ;        dec bc
  159. ;        in h,(C)                ; MM
  160. ;        dec bc
  161. ;        in l,(C)                ; SS
  162. ;        dec bc
  163. ;        in c,(C)                ; restart TOD
  164. ;        ld c,a
  165. ;        
  166. ;        ld de,02c20h    
  167. ;        
  168. ;        call Bcd2HexAscii
  169. ;        rra
  170. ;        ld a,3ah                ; ":"
  171. ;        jr c,commas
  172. ;        ld a,20h                ; " "
  173. ;commas
  174. ;        ld de,02c22h            ; " "|":" -> Video
  175. ;        ld (de),a
  176. ;        ld de,02c25h            ; " "|":" -> Video
  177. ;        ld (de),a
  178.  
  179. ;        JP 0FFE0h               ; --> 8502
  180. ;        NOP          
  181.  
  182.  
  183.  
  184. ;ffe0  F3          DI
  185. ;ffe1  3E 3E       LD A, #$3E
  186. ;ffe3  32 00 FF    LD ($FF00),A
  187. ;ffe6  01 05 D5    LD BC, #$D505
  188. ;ffe9  3E B1       LD A, #$B1
  189. ;ffeb  ED 79       OUT BC,A
  190. ;ffed  00          NOP
  191. ;ffee  C3 3E 1C    JP $1C3E
  192.  
  193.  
  194. ;;;----------------------------------------------------
  195. ;;; Converts a 6-digit BCD number to a hex ASCII string
  196. ;;;
  197. ;;; input: DE = pointer to start of ASCII string
  198. ;;; C:HL number to be converted
  199. ;;; output: DE = pointer past end of ASCII string
  200. ;;; destroys: A,F,D,E
  201. ;;;-----------------------------------------------------
  202. ;Bcd2HexAscii
  203. ;        ;push de
  204. ;        LD A, C
  205. ;        CALL cvtUpperNibble
  206. ;        LD A, C
  207. ;        CALL cvtLowerNibble
  208. ;        inc de
  209. ;        LD A, H
  210. ;        CALL cvtUpperNibble
  211. ;        LD A, H
  212. ;        CALL cvtLowerNibble
  213. ;        inc de
  214. ;        LD A, L
  215. ;        CALL cvtUpperNibble
  216. ;        LD A, L
  217. ;        JP cvtLowerNibble
  218. ;        
  219.  
  220. ;cvtUpperNibble
  221. ;        RRA ; move upper nibble into lower nibble
  222. ;        RRA
  223. ;        RRA
  224. ;        RRA
  225. ;cvtLowerNibble
  226. ;        AND 0Fh         ; isolate lower nibble
  227. ;        OR 30h
  228. ;        LD (DE), A
  229. ;        INC DE
  230. ;        RET
  231. ;        
  232. ;cpu
  233. ;        .db 01ah, "80"  ; "Z80"
  234.  
RAW Paste Data