Blame | Last modification | View Log | Download | RSS feed
;----------------------------------------------------------
; DIRP02.ASM
; PROGETTO: B1601
;
; Variabili in Direct Page $02
;----------------------------------------------------------
; sezione COMMON -- questo permette di includere il file in piu' file
DIRP02: .SECTION page0, ref_only, common ;Direct-Page 02
.ABSOLUTE ;; inizia sempre da $00
.ORG 0x00
; variabili usate nella funzione _vprintl e famiglia funzioni di formattazione
FmtParm .DW ;; ptr array parametri banco 0
FmtLPFmt LP ;; long ptr stringa szFmt
FmtLPPut LP ;; long ptr funzione 'putter'
FmtSpec .DB ;; indice '%' corrente in szFmt
FmtWidth .DB ;; campo width
FmtPrec .DB ;; campo precision
FmtFlag .DB ;; flag formattazione
FmtSgn .DB ;; segno positivo (se 0 -> no segno)
VStoreF .DB ;; flag modo store
FmtMod .DB ;; flag modificatori
FmtDst .DB ;; ptr stringa szDst banco 0
FmtCnt .DW ;; contatore caratteri
FmtGMax .DW ;; max. len stringa globale
XVDec .DW ; esponente decimale (signed)
XVFlag .DB ; flag per conversioni numeriche
ACMCmps .DB ; flag compare segno e tipo (intero)
ACM DQ ; accumulatore #1 integer 64 bit
ACMSize .DB ; size
ACMSgn .DB ; <7>:segno, <6>:tipo signed
ACMMinSize .DB ; minima dimensione richiesta per ACM
IARGMinSize .DB
FPTmp1 .DB ; byte temporaneo
FPTmp2 .DB ; byte temporaneo
FPTmp3 .DB ; byte temporaneo
FPTmp4 .DB ; byte temporaneo
IARG DQ ; accumulatore #2 integer 64 bit
IARGSize .DB ; size
IARGSgn .DB ; <7>:segno, <6>:tipo signed
FOP DS 9 ; temporaneo per FDIV/FMULT/integer MULT/DIV
; conversione integer -> string
FPIndx .DB ; byte generico indice
FPWTmp7 .DW ; word temporanea
FPWTmp8 .DW ; word temporanea
; variabili temporanee sovrapposte a FOP
FACXM .EQU FOP+4 ; byte temporaneo
ARGXM .EQU FOP+5 ; byte temporaneo
FPWTmp5 .EQU FOP+6 ; word temporanea
FPTmp6 .EQU FOP+8 ; byte temporaneo
; Floating Point Accumulator #1 - FAC
FACSGN .DB ; FAC mantissa sign
FACEXT .DB ; FAC 8 bit extension (rounding)
FACM DQ ; FAC Mantissa (64 bit)
FACExp .DW ; FAC Exponent
FACEXPL .EQU FACExp ; FAC Exponent Low
FACEXPH .EQU FACExp+1 ; FAC Exponent Hi
FACSCMP .DB ; Sign Comparison Result: FAC vs ARG
FACMlt .DB ; flag MULT
FACUndf .DB ; conteggio shift per underflow
FPDCnt .DB ; contatore per inserzione punto decimale
; Floating Point Accumulator #2 - ARG
ARGSGN .DB ; ARG mantissa sign
ARGEXT .DB ; ARG 8 bit extension (rounding)
ARGM DQ ; ARG Mantissa (64 bit)
ARGExp .DW ; ARG Exponent
ARGEXPL .EQU ARGExp ; ARG Exponent Low
ARGEXPH .EQU ARGExp+1 ; ARG Exponent Hi
; numero bytes FAC
FACSIZE .EQU (FACEXPH - FACEXT)
MANTSIZE .EQU (FACSIZE - 2)
FACMBITS .EQU (MANTSIZE * 8)
FAC .EQU FACEXT
ARG .EQU ARGEXT
FPWTmp .DW
FPExp .DW ; esponente conversioni str/float
FPLPtr LP ; long ptr operazioni move
FPFlag .DB ; flag generico operazioni FPU
FACTmp .DS 12 ; registro FAC temporaneo (con sgn ed ext)
; buffer per conversione da int/float a string (20 digit + 2)
FPSTRSIZE .EQU 22
FPUStr .DS FPSTRSIZE
; buffer per formattazione int/float
XFSTRSIZE .EQU 48
XCVTStr .DS XFSTRSIZE
XCVTStrEnd .EQU ($ - 1)
DUMMY100 .DS 22
PTR1 .EQU FPLPtr ; long ptr operazioni 'move'
FPFLAG .EQU FPFlag
FPDCNT .EQU FPDCnt
.RELATIVE
.ENDS
MAXMANTSHIFT .EQU (-(FACMBITS + 16)) ; max. shift divisione mant.
XCVTMAXF .EQU (XFSTRSIZE - 1) ; max. caratteri formato F
XCVTMAXE .EQU (XCVTMAXF - 8) ; max. caratteri formato E
XCVTMAXI .EQU (XFSTRSIZE - 2) ; max. caratteri stringa int.