[abc80] Re: Abc80-fpga: skriva till direktfiler på PRB:

juhasz at abc.se juhasz at abc.se
Mon Aug 10 07:41:58 PDT 2009


Tackar! Ska bli intressant att testa nån kväll!

Dessutom antar jag att rutinen kan användas direkt från "ld ix,(65074)"
utan omvägen via Q0$ om man lägger destinationsadressen på stacken och
sedan anropar? Målet med min övning är ju att kopiera in en fil binärt i
minnet... Då är det ju trevligt att bara kunna ange dest adress...

Hälsningar

Robert

> Helt och totalt otestat:
>
> ;
> ; Get a binary block from the file in DE loaded into Q0¤
> ;
> ; Usage: Z%=CALL%(address, filenum);
> ;
> ; Note: the only position-dependent instruction in this
> ; entire piece of code is the CALL instruction near the end.
> ;
> 	org 32768			; Or whereever...
>
> get_blk:
> 	; DE = file number
> 	; Find Q0¤
> 	push ix
> 	ld hl,(65065)			; Variable list
> find_q0:
> 	ld a,l
> 	or h
> 	jr nz,var_not_end
> 	rst 10h
> 	defb 128+0			; "Ej tillåtet öka DIM"
> var_not_end:
> 	ld a,(hl)
> 	inc hl
> 	cp 02h				; ?0¤
> 	ld a,(hl)
> 	inc hl
> 	jr nz,skip
> 	cp 'Q'				; Q..
> 	jr z,found_q0
> skip:
> 	ld a,(hl)
> 	inc hl
> 	ld h,(hl)
> 	ld l,a
> 	jr find_q0
> found_q0:
> 	ld e,(hl)
> 	inc hl
> 	ld a,(hl)
> 	inc hl
> 	and a
> 	jr nz,okdim
> 	ld a,e
> 	cp 253
> 	jr nc,okdim
> 	rst 10h
> 	defb 128+10			; "Texten får ej plats i strängen"
> okdim:
> 	ld b,(hl)
> 	inc hl
> 	ld c,(hl)
> 	push bc				; String data pointer
> 	ld (hl),253			; Length <- 253
> 	inc hl
> 	ld (hl),0
>
> 	; Now we have the string target address on stack, and the
> 	; file number in (D)E.  Find the file.
> 	ld ix,(65074)
> find_file:
> 	defb 0ddh
> 	ld a,l				; LD A,IXL
> 	defb 0ddh
> 	or h				; OR IXH
> 	jr nz,file_not_end
> 	rst 10h
> 	defb 128+44			; "Logisk fil ej öppen"
> file_not_end:
> 	ld a,(ix+2)
> 	cp e
> 	jr z,found_file
> 	ld c,(ix+0)
> 	ld b,(ix+1)
> 	push bc
> 	pop ix
> 	jr find_file
> found_file:
> 	ld l,(ix+3)			; Point to the device list entry
> 	ld h,(ix+4)
> 	inc hl
> 	inc hl
> 	inc hl
> 	inc hl
> 	inc hl
> 	ld e,(hl)
> 	inc hl
> 	ld d,(hl)
> 	ld hl,3*5			; READ BLOCK
> 	add hl,de
> 	call jp_hl			; Call the read block routine
> 	; Now HL -> filled buffer
> 	pop de
> 	ld bc,253
> 	ldir
> 	pop ix
> 	ret
> jp_hl:
> 	jp (hl)
>
> --
> H. Peter Anvin, Intel Open Source Technology Center
> I work for Intel.  I don't speak on their behalf.
>



More information about the ABC80 mailing list