Re-enable Z180 internal I/O, add basic ROM which maps the Z180 internal I/O out of...
[fuzix_sim.git] / roms / z180.asm
1         .z180
2
3 IOCR            = 0x3f
4
5 CONSOLE_DATA    = 1
6
7 FDC_DRIVE       = 10
8 FDC_TRACK       = 11
9 FDC_SECTOR_LO   = 12
10 FDC_COMMAND     = 13
11 FDC_STATUS      = 14
12 FDC_ADDR_LO     = 15
13 FDC_ADDR_HI     = 16
14 FDC_SECTOR_HI   = 17
15
16 MMU_INIT        = 20
17 MMU_BANK_SEL    = 21
18 MMU_SEG_SIZE    = 22
19 MMU_WRITE_PROT  = 23
20
21         ld      hl,loader
22         ld      de,0x1000
23         ld      bc,loader_end-loader
24         ldir
25         jp      0x1000
26
27 loader:
28         ; use in0/out0 for internal registers
29         ld      a,0xc0
30         out0    (IOCR),a                ; remap Z180 internal I/O to c0-ff
31
32         ; use in/out for simulation registers (high address not decoded)
33         ;sub    a
34         ;out    (MMU_BANK_SEL),a        ; go to first bank (RAM)
35         ;ld     a,0xc0
36         ;out    (MMU_SEG_SIZE),a        ; 48 kbyte
37         ;ld     a,1
38         ;out    (MMU_INIT),a            ; 1 bank
39
40         ; read drive 0 track 0 sector 1 to address 0
41         sub     a
42         out     (FDC_DRIVE),a
43         out     (FDC_TRACK),a
44         ld      a,1
45         out     (FDC_SECTOR_LO),a
46         sub     a
47         out     (FDC_SECTOR_HI),a
48         out     (FDC_ADDR_LO),a
49         out     (FDC_ADDR_HI),a
50         out     (FDC_COMMAND),a
51         in      a,(FDC_STATUS)
52         or      a
53         jp      z,0
54
55         ; read has failed, print message
56         ld      hl,message-loader+0x1000
57 message_loop:
58         ld      a,(hl)
59         or      a
60 1$:     jr      z,1$
61         out     (CONSOLE_DATA),a
62         inc     hl
63         jr      message_loop
64
65 message:
66         .ascii  'Error reading boot sector\r\n\0'
67
68 loader_end:
69
70         .end