Queste sono routine di conversione da valore a stringa e viceversa. CTA - Char To Ascii A = Data HL = Buffer end Converte in ASCII il valore contenuto nel registro A e pone la stringa risultante all'indirizzo puntato da HL meno due (tre caratteri). ITA - Int To Ascii HL = Data IX = Buffer end Converte in ASCII il valore contenuto nel registro HL e pone la stringa risultante all'indirizzo puntato da IX meno quattro (cinque caratteri). ATC - Ascii To Char HL = Buffer A = Data Converte in valore la stringa numerica contenuta all'indirizzo puntato da HL ponendo tale valore nel registro A. ATI - Ascii To Int IX = Buffer HL = Data Converte in valore la stringa numerica contenuta all'indirizzo puntato da IX ponendo tale valore nel registro HL. I dati trattati dalle seguenti routines io li chiamo in formato "extended regs" in quanto si comportano quasi come fossero registri del processore solo che sono composti da un numero di bytes variabile da 1 fino a 256. ADD - Add xregs DE = Op1 HL = Op2 DE = Res B = Data len Somma il dato puntato da DE con quello puntato da HL ponendo il risultato nel dato puntato da DE. La lunghezza dei dati sommati è contenuta in B. SUB - Subtract xregs DE = Op1 HL = Op2 DE = Res B = Data len Sottrae il dato puntato da HL da quello puntato da DE ponendo il risultato nel dato puntato da DE. La lunghezza dei dati sommati è contenuta in B. MUL - Multiply xregs IX = Op1 HL = Op2 IX = Res C = Data len Moltiplica il dato puntato da IX per quello puntato da HL ponendo il risultato nel dato puntato da IX. La lunghezza dei dati moltiplicati è contenuta in C. DIV - Divide xregs IX = Op1 HL = Op2 IX = Res C = Data len REM = Resto Divide il dato puntato da IX per quello puntato da HL ponendo il risultato nel dato puntato da IX. La lunghezza dei dati divisi è contenuta in C. All'indirizzo puntato dalla label REM c'è il resto della divisione. La seguenta routine è analoga alla precedente ma tiene conto del segno che è rappresentato dal bit più significativo dell'extended reg. La ADD, la SUB e la MUL gestiscono già il segno in modo automatico. DVS - Divide xregs with sign IX = Op1 HL = Op2 IX = Res C = Data len REM = Resto Divide il dato puntato da IX per quello puntato da HL ponendo il risultato nel dato puntato da IX. La lunghezza dei dati divisi è contenuta in C. All'indirizzo puntato dalla label REM c'è il resto della divisione. Queste sono routine accessorie. NEG - Neg xreg HL = Data B = Data len Nega il dato puntato da HL. La lunghezza del dato è contenuta in B. CMP - Compare xregs DE = Op1 HL = Op2 B = Data len Confronta il dato puntato da DE con quello puntato da HL. La lunghezza dei dati confrontati è contenuta in B. Il risultato è: C (Carry) se Op1 < Op2, NZ se Op1 > Op2, Z se Op1 = Op2. CPS - Compare xregs with sign DE = Op1 HL = Op2 B = Data len Confronta il dato puntato da DE con quello puntato da HL. La lunghezza dei dati confrontati è contenuta in B. Il risultato è: C (Carry) se Op1 < Op2, NZ se Op1 > Op2, Z se Op1 = Op2. Queste sono routine di conversione da valore a stringa e viceversa per gli extended regs. ATB - Ascii To Bin IX = Buffer HL = Data B = Data len Converte in valore la stringa numerica contenuta all'indirizzo puntato da IX ponendo tale valore nel dato puntato da HL. La lunghezza del dato è contenuta in B. La stringa numerica deve essere terminata con uno zero. BTA - Bin To Ascii IX = Data end B = Data len HL = Buffer end C = Buffer len Converte in ASCII il valore contenuto nel dato del quale IX punta il byte di indirizzo più alto e pone la stringa risultante nel buffer del quale HL punta il byte di indirizzo più alto. La lunghezza del dato è contenuta in B mentre la lunghezza massima del buffer è contenuta in C. La stringa risultato contiene tutti gli zeri non significativi a sinistra. Il buffer va azzerato prima di eseguire l'operazione. I dati trattati dalle seguenti routines sono floating-point composti da un extended reg come mantissa e da un byte come esponente. Quest'ultimo indica quante volte si deve dividere la mantissa per 10 per ottenere il valore rappresentato (ad esempio: 12345 3 rappresenta 12.345). NRD - Normalize float down IX = Data HL = 10^(dec-B) C = Data len B = Dec Normalizza il dato puntato da IX riducendo i decimali al valore contenuto in B e dividendo la mantissa per l'opportuna potenza di dieci. Ad esempio, 12345678 5 (123.45678) con B = 3 diventerebbe 123456 3 (123.456). La lunghezza della mantissa del dato è contenuta in C. HL deve puntare ad un dato contenente il valore 10^(dec-B), dove dec è il numero di decimali attuali. Nell'esempio 10^(5-3) = 100. NDS - Normalize float down with sign IX = Data HL = 10^(dec-B) C = Data len B = Dec Normalizza il dato puntato da IX riducendo i decimali al valore contenuto in B e dividendo la mantissa per l'opportuna potenza di dieci. Ad esempio, 12345678 5 (123.45678) con B = 3 diventerebbe 123456 3 (123.456). La lunghezza della mantissa del dato è contenuta in C. HL deve puntare ad un dato contenente il valore 10^(dec-B), dove dec è il numero di decimali attuali. Nell'esempio 10^(5-3) = 100. ADF - Add float DE = Op1+1 HL = Op2+1 DE = Res B = Data len Somma il dato puntato da DE con quello puntato da HL ponendo il risultato nel dato puntato da DE. La lunghezza delle mantisse dei dati sommati è contenuta in B. Il risultato è corretto solo se i dati hanno lo stesso esponente. SBF - Subtract float DE = Op1+1 HL = Op2+1 DE = Res B = Data len Sottrae il dato puntato da HL da quello puntato da DE ponendo il risultato nel dato puntato da DE. La lunghezza delle mantisse dei dati sommati è contenuta in B. Il risultato è corretto solo se i dati hanno lo stesso esponente. MLF - Multiply Float IX = Op1 HL = Op2 IX = Res C = Data len Moltiplica il dato puntato da IX per quello puntato da HL ponendo il risultato nel dato puntato da IX. La lunghezza delle mantisse dei dati moltiplicati è contenuta in C. E' opportuno usare NRD o NDS dopo l'operazione per evitare di incorrere nell'overflow del risultato. DVF - Divide Float IX = Op1 HL = Op2 IX = Res C = Data len Divide il dato puntato da IX per quello puntato da HL ponendo il risultato nel dato puntato da IX. La lunghezza delle mantisse dei dati divisi è contenuta in C. La precisione del risultato è quella del primo operando. La seguente routine è analoga alla precedente ma tiene conto del segno che è rappresentato dal bit più significativo della mantissa. La ADF, la SBF e la MLF gestiscono già il segno in modo automatico. DFS - Divide Float with sign IX = Op1 HL = Op2 IX = Res C = Data len Divide il dato puntato da IX per quello puntato da HL ponendo il risultato nel dato puntato da IX. La lunghezza delle mantisse dei dati divisi è contenuta in C. La precisione del risultato è quella del primo operando. Queste sono routine di conversione da valore a stringa e viceversa per i floating-point. ATF - Ascii To Float IX = Buffer HL = Data B = Data len Converte in valore la stringa numerica contenuta all'indirizzo puntato da IX ponendo tale valore nel dato puntato da HL. Tale stringa può naturalmente contenere il punto decimale. La lunghezza del dato è contenuta in B. La stringa numerica deve essere terminata con uno zero. FTA - Float To Ascii IX = Data end B = Data len HL = Buffer end C = Buffer len Converte in ASCII il valore contenuto nel dato del quale IX punta il byte di indirizzo più alto e pone la stringa risultante nel buffer del quale HL punta il byte di indirizzo più alto. Tale stringa conterrà il punto decimale se l'esponente è diverso da zero. La lunghezza massima del dato è contenuta in B mentre la lunghezza massima del buffer è contenuta in C. La stringa risultato contiene tutti gli zeri non significativi a sinistra. Il buffer va azzerato prima di eseguire l'operazione.