You are on page 1of 2

0010 CFdata equ 10h

0012 CFscnt equ 12h


0013 CFlba0 equ 13h
0014 CFlba1 equ 14h
0015 CFlba2 equ 15h
0016 CFlba3 equ 16h
0017 CFstat equ 17h
0017 CFcmd equ 17h

0020 CmdRd equ 20h

8000 org 8000h

8000 31 ff ff ld sp,0ffffh
8003 21 00 da ld hl,0da00h ; get buffer in HL
8006 16 02 ld d,2
8008 3e 01 ld a,1
800a d3 12 out (CFscnt),a
800c 3e 00 ld a,0
800e d3 14 out (CFlba1),a
8010 d3 15 out (CFlba2),a
8012 3e e0 ld a,0e0h
8014 d3 16 out (CFlba3),a
8016 cd 3f 80 wb1: call wtrdy
8019 7a ld a,d
801a d3 13 out (CFlba0),a
801c cd 3f 80 call wtrdy ; can we go on?
801f 3e 20 ld a,CmdRd ; read command
8021 d3 17 out (CFcmd),a ; issue it
8023 cd 3f 80 call wtrdy ; can we go on?
8026 cd 46 80 call wtdrq ; wait for drq from drive
8029 0e 04 ld c,4 ; read 4 sets of 128

802b 06 80 wb2: ld b,128 ; quarter sector


802d db 10 wb3: in a,(CFdata)
802f 77 ld (hl),a ; put byte in RAM
8030 23 inc hl
8031 10 fa djnz wb3 ; read 128 times

8033 0d dec c
8034 20 f5 jr nz,wb2 ; do 4 times

8036 14 inc d
8037 7a ld a,d
; cp 12 ; load CCP & BDOS
8038 fe 10 cp 16 ; load everything
803a 38 da jr c,wb1

803c c3 00 f0 jp 0f000h ; start cp/m

803f db 17 wtrdy: in a,(CFstat) ; read status


8041 cb 7f bit 7,a ; check busy bit
8043 20 fa jr nz,wtrdy ; loop if busy
8045 c9 ret

8046 db 17 wtdrq: in a,(CFstat) ; read status


8048 cb 5f bit 3,a ; ready to go?
804a 28 fa jr z,wtdrq ; loop if no DRQ
804c c9 ret

804d end

0017 CFcmd 0010 CFdata 0013 CFlba0 0014 CFlba1


0015 CFlba2 0016 CFlba3 0012 CFscnt 0017 CFstat
0020 CmdRd 8016 wb1 802b wb2 802d wb3
8046 wtdrq 803f wtrdy

You might also like