
|
Listing 1 van 'Met mathpack routines rekenen in ML' Jan vd Meer?, 00-00-00
;ASSEMBLERLISTING 1
;------------------
DAC EQU #F7F6 ;Buffer 1e rekenfactor of uitkomst berekening
ARG EQU #F847 ;Buffer 2e rekenfactor
VALTYP EQU #F663 ;Type code van variabele (= aantal relevante bytes)
FIN EQU #3299 ;Conversie ascii-Z string naar mathpack notatie
FOUT EQU #3425 ;Conversie mathpak notatie naar afdrukbare string
FRCDBL EQU #303A ;Conversie integer DAC+2/+3 naar dubb.preciesie (DAC)
DECDIV EQU #289F ;DAC / ARG ----> DAC (delen)
MAF EQU #2C4D ;DAC ----> ARG
ENTRY_A EQU #F580 ;Invuladres voor entry-adres van mathpack routine
STRING1 EQU #F59D ;Opslag te typen numerieke string (1e byte = lengte)
RESULT1 EQU #F5BD ;Opslag resultaat (valtyp + mathpack notatie)
RESULT2 EQU #F5C6 ;Idem
;-----------------
LD HL,MATHP_0 ;Beginadres te kopie‰ren ML-code (bronadres)
LD DE,#F55E ;Input-buffer (doeladres)
LD BC,#003F ;Aantal bytes
LDIR ;ML-code kopie‰ren naar inputbuffer #F55E
JP NEXT ;(zie assemblerlisting 2)
;--------------------------------------
;NAAR INPUT-BUFFER TE KOPIEEREN ML-CODE
;--------------------------------------
;Input: #FF in 'A' indien basic-rom aan te schakelen, else #00
MATHP_0 INC A ;Basic-rom aanschakelen ?
PUSH AF ; Save vlaggen
JR NZ,MATHP_1 ;Nee
IN A,(#A8) ;Inhoud slotregister
LD (#F59B),A ; opslaan
LD A,(#FFFF) ;Lees komplement van subslotregister
CPL ;Werkelijk inhoud van subslotregister
LD (#F59C),A ; opslaan
LD A,(#FCC1) ;Slotadres basic-ROM
LD H,#40 ;ID page 1
CALL #0024 ;Basic-rom aanschakelen
LD HL,#F59E ;Pointer naar begin ascii-Z string
LD A,(HL) ;Eerste karakter van string
MATHP_1 PUSH IX
PUSH IY
LD IX,#3299 ;Entry-adres mathpack-routine "FIN"
; NOOT: Invuladres voor ander entry-adres = #F580
LD IY,(#FCC0) ;Slot ID biosrom
CALL #001C ;Mathpack-routine uitvoeren
POP IY
POP IX
POP AF ;Herstel vlaggen
RET NZ ;RET indien rom niet aangeschakeld werd
LD A,(#F59B) ;Oude instelling slotregister
OUT (#A8),A ; herstellen
LD A,(#F59C) ;Oude instelling subslotregister
LD (#FFFF),A ; herstellen
RET
DEFS 1 ;Opslag slotregister (adres = #F59B)
DEFS 1 ;Opslag subslotregister (adres = #F59C)
;---------------------------------------------------------------
|