From 34741932f23f5b1aade6b8cda79b16daa276913e Mon Sep 17 00:00:00 2001 From: Riccardo Date: Wed, 26 Jul 2017 12:34:52 +0200 Subject: [PATCH] Latest tests upload --- AppleII/FP MUL new/Conv3p | Bin 0 -> 128 bytes AppleII/FP MUL new/Conv3p.asm | 143 ++++++ AppleII/FP MUL new/Conv3p_Output.txt | 147 +++++++ AppleII/FP MUL new/UNIMULG.bas | 15 + AppleII/FP MUL new/UNIMULG.txt | 15 + AppleII/FP MUL new/UniFP1 | Bin 0 -> 570 bytes AppleII/FP MUL new/UniFP1.asm | 522 ++++++++++++++++++++++ AppleII/FP MUL new/UniFP1_Output.txt | 549 ++++++++++++++++++++++++ AppleII/FP MUL new/UniFP2 | Bin 0 -> 232 bytes AppleII/FP MUL new/UniFP2.asm | 326 ++++++++++++++ AppleII/FP MUL new/UniFP2_Output.txt | 351 +++++++++++++++ AppleII/FP MUL new/_FileInformation.txt | 3 + AppleII/FP MUL new/unix.bas | 15 + AppleII/FP f(x)/FPConv | Bin 0 -> 128 bytes AppleII/FP f(x)/FPConv.asm | 143 ++++++ AppleII/FP f(x)/FPConv_Output.txt | 147 +++++++ AppleII/FP f(x)/FPData | Bin 0 -> 263 bytes AppleII/FP f(x)/FPData.asm | 326 ++++++++++++++ AppleII/FP f(x)/FPData_Output.txt | 351 +++++++++++++++ AppleII/FP f(x)/FPMain | Bin 0 -> 576 bytes AppleII/FP f(x)/FPMain.asm | 520 ++++++++++++++++++++++ AppleII/FP f(x)/FPMain_Output.txt | 547 +++++++++++++++++++++++ AppleII/FP f(x)/UNI5.bas | 11 + AppleII/FP f(x)/_FileInformation.txt | 3 + AppleII/FP f(x)/unix.bas | 10 + 25 files changed, 4144 insertions(+) create mode 100644 AppleII/FP MUL new/Conv3p create mode 100644 AppleII/FP MUL new/Conv3p.asm create mode 100644 AppleII/FP MUL new/Conv3p_Output.txt create mode 100644 AppleII/FP MUL new/UNIMULG.bas create mode 100644 AppleII/FP MUL new/UNIMULG.txt create mode 100644 AppleII/FP MUL new/UniFP1 create mode 100644 AppleII/FP MUL new/UniFP1.asm create mode 100644 AppleII/FP MUL new/UniFP1_Output.txt create mode 100644 AppleII/FP MUL new/UniFP2 create mode 100644 AppleII/FP MUL new/UniFP2.asm create mode 100644 AppleII/FP MUL new/UniFP2_Output.txt create mode 100644 AppleII/FP MUL new/_FileInformation.txt create mode 100644 AppleII/FP MUL new/unix.bas create mode 100644 AppleII/FP f(x)/FPConv create mode 100644 AppleII/FP f(x)/FPConv.asm create mode 100644 AppleII/FP f(x)/FPConv_Output.txt create mode 100644 AppleII/FP f(x)/FPData create mode 100644 AppleII/FP f(x)/FPData.asm create mode 100644 AppleII/FP f(x)/FPData_Output.txt create mode 100644 AppleII/FP f(x)/FPMain create mode 100644 AppleII/FP f(x)/FPMain.asm create mode 100644 AppleII/FP f(x)/FPMain_Output.txt create mode 100644 AppleII/FP f(x)/UNI5.bas create mode 100644 AppleII/FP f(x)/_FileInformation.txt create mode 100644 AppleII/FP f(x)/unix.bas diff --git a/AppleII/FP MUL new/Conv3p b/AppleII/FP MUL new/Conv3p new file mode 100644 index 0000000000000000000000000000000000000000..eba8fd54db8ea3bc1ebaaee7bbaa817e2dadd61d GIT binary patch literal 128 zcmY$`cTXYx?$Wtdt-o5|EL~*4E3tGDXG2!&@7A|I+6_QXmgj$oOhyoY>HMtLKdtYU zF34*A+xmX#!mQSR32PY&q*~{$Wh^k@kpPlfoDHq>e3Bc0OpBL{p8vI4=d~_c%T%D% cI)5!QkX*3zpH}Na1)!ae@2^tOex2YA05WPmjQ{`u literal 0 HcmV?d00001 diff --git a/AppleII/FP MUL new/Conv3p.asm b/AppleII/FP MUL new/Conv3p.asm new file mode 100644 index 0000000..b957878 --- /dev/null +++ b/AppleII/FP MUL new/Conv3p.asm @@ -0,0 +1,143 @@ +* @com.wudsn.ide.asm.hardware=APPLE2 +************************************ +* BASIC TO FAC TO FP1 * +* X=NUMBER * +* CALL 32768,X 768,X * +************************************ + org $8000 + +CHKCOM equ $DEBE +FRMNUM equ $DD67 +PTRGET equ $DFE3 +MOVMF equ $EB2B +MOVFM equ $EAF9 + +** Woz FP Accumulator 4 Byte + 1 Byte Extra + 1 Byte SIGN** +FP1 equ $FA ;Translate F8 --> FA +E equ $FE ;Translate FC --> FE +SIGN equ $EB + +FP2 equ $EC + +** Applesoft FP Accumulator 5 Byte + 1 Byte Sign ** +FAC equ $9D + +RSLT equ $7000 + + *************************** + +ENTRY1 jsr CHKCOM + jsr FRMNUM ;VARIABLE X ->FAC (6 Byte Unpacked) + +** FPC to FP1 conversion ** + + lda FAC + dec A ; dec the EXP + sta FP1 + sta FP2 ; Copy + + lda FAC+5 + bmi NEG ; chk the Hi bit of 1 byte Mantissa + +POS clc ; Hi bit 0 for negative + lda FAC+5 + + ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + ror ; Didide for 2^1 + + sta FP1+1 + sta FP2+1 ; Copy + + jmp CONT + +NEG clc ; Hi bit 1 for positive + lda FAC+5 + + ror ; Didide for 2^1 + + eor #$FF ; One's complement, NOT + clc + adc #01 ; Two's complement, +1 + + sta FP1+1 + sta FP2+1 ; Copy + +CONT lda FAC+2 + ror + sta FP1+2 + sta FP2+2 ; Copy + + lda FAC+3 + ror + sta FP1+3 + sta FP2+3 ; Copy FP2=FP1 X2=X1 + + lda FAC+4 + ror + sta E + + ;brk + rts + +************************************ +* FP1 TO FAC TO BASIC * +* CALL 32831,Y 831,Y * +* PRINT Y * +************************************ + +* +** FP1 to FAC conversion ** +* +ENTRY2 lda RSLT ; X1 1 Byte --> 9D FAC + inc A ; 2^(FP1+1) inc EXP + sta FAC + + lda RSLT+1 + bmi NEG2 ; chk the Hi bit of 1 byte Mantissa + + +POS2 clc + lda RSLT+1 ; M1 Hi 2 Byte --> 9E FAC + rol ; Multiply for 2^1 + + ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + sta FAC+1 ; To 6^ Byte of FAC Unpacked + + ;sta FAC+5 ; To 1^ Byte Mantissa of FAC UnPacked + jmp CONT2 + +NEG2 lda RSLT+1 + + sec + sbc #01 ; One's complement inv -1 + eor #$FF ; Two's complement inv NOT + + rol ; Multiply for 2^1 + + sta FAC+1 ; To 1^ Byte Mantissa of FAC Packed + sta FAC+5 ; To 6^ Byte of FAC Unpacked + + +CONT2 lda RSLT+2 ; M1 3 Byte --> 9F FAC + rol + sta FAC+2 + + lda RSLT+3 ; M1 Lo 4 Byte --> A0 FAC + rol + sta FAC+3 + + lda E ; Extra 5 Byte --> A1 FAC + rol + sta FAC+4 + + ;brk + *************************** +* + jsr CHKCOM + jsr PTRGET ; Return the Y and A pointing to the specific variabile + tax + jsr MOVMF ;FAC->VARIABLE Y (5 Bytes Packed) + + ;brk + rts + chk \ No newline at end of file diff --git a/AppleII/FP MUL new/Conv3p_Output.txt b/AppleII/FP MUL new/Conv3p_Output.txt new file mode 100644 index 0000000..d0de78f --- /dev/null +++ b/AppleII/FP MUL new/Conv3p_Output.txt @@ -0,0 +1,147 @@ +------+----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code +------+----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + 1 | 1 Conv3p.asm 1 | Comment | 11 | | 0 | 00/8000 | * @com.wudsn.ide.asm.hardware=APPLE2 + 2 | 1 Conv3p.asm 2 | Comment | 11 | | 0 | 00/8000 | ************************************ + 3 | 1 Conv3p.asm 3 | Comment | 11 | | 0 | 00/8000 | * BASIC TO FAC TO FP1 * + 4 | 1 Conv3p.asm 4 | Comment | 11 | | 0 | 00/8000 | * X=NUMBER * + 5 | 1 Conv3p.asm 5 | Comment | 11 | | 0 | 00/8000 | * CALL 32768,X 768,X * + 6 | 1 Conv3p.asm 6 | Comment | 11 | | 0 | 00/8000 | ************************************ + 7 | 1 Conv3p.asm 7 | Directive | 11 | | 0 | 00/8000 | org $8000 + 8 | 1 Conv3p.asm 8 | Empty | 11 | | 0 | 00/8000 | + 9 | 1 Conv3p.asm 9 | Equivalence | 11 | | 0 | 00/8000 | CHKCOM equ $DEBE + 10 | 1 Conv3p.asm 10 | Equivalence | 11 | | 0 | 00/8000 | FRMNUM equ $DD67 + 11 | 1 Conv3p.asm 11 | Equivalence | 11 | | 0 | 00/8000 | PTRGET equ $DFE3 + 12 | 1 Conv3p.asm 12 | Equivalence | 11 | | 0 | 00/8000 | MOVMF equ $EB2B + 13 | 1 Conv3p.asm 13 | Equivalence | 11 | | 0 | 00/8000 | MOVFM equ $EAF9 + 14 | 1 Conv3p.asm 14 | Empty | 11 | | 0 | 00/8000 | + 15 | 1 Conv3p.asm 15 | Comment | 11 | | 0 | 00/8000 | ** Woz FP Accumulator 4 Byte + 1 Byte Extra + 1 Byte SIGN** + 16 | 1 Conv3p.asm 16 | Equivalence | 11 | | 0 | 00/8000 | FP1 equ $FA ;Translate F8 --> FA + 17 | 1 Conv3p.asm 17 | Equivalence | 11 | | 0 | 00/8000 | E equ $FE ;Translate FC --> FE + 18 | 1 Conv3p.asm 18 | Equivalence | 11 | | 0 | 00/8000 | SIGN equ $EB + 19 | 1 Conv3p.asm 19 | Empty | 11 | | 0 | 00/8000 | + 20 | 1 Conv3p.asm 20 | Equivalence | 11 | | 0 | 00/8000 | FP2 equ $EC + 21 | 1 Conv3p.asm 21 | Empty | 11 | | 0 | 00/8000 | + 22 | 1 Conv3p.asm 22 | Comment | 11 | | 0 | 00/8000 | ** Applesoft FP Accumulator 5 Byte + 1 Byte Sign ** + 23 | 1 Conv3p.asm 23 | Equivalence | 11 | | 0 | 00/8000 | FAC equ $9D + 24 | 1 Conv3p.asm 24 | Empty | 11 | | 0 | 00/8000 | + 25 | 1 Conv3p.asm 25 | Equivalence | 11 | | 0 | 00/8000 | RSLT equ $7000 + 26 | 1 Conv3p.asm 26 | Empty | 11 | | 0 | 00/8000 | + 27 | 1 Conv3p.asm 27 | Comment | 11 | | 0 | 00/8000 | *************************** + 28 | 1 Conv3p.asm 28 | Empty | 11 | | 0 | 00/8000 | + 29 | 1 Conv3p.asm 29 | Code | 11 | | 3 | 00/8000 : 20 BE DE | ENTRY1 jsr {$DEBE} + 30 | 1 Conv3p.asm 30 | Code | 11 | | 3 | 00/8003 : 20 67 DD | jsr {$DD67} ;VARIABLE X ->FAC (6 Byte Unpacked) + 31 | 1 Conv3p.asm 31 | Empty | 11 | | 0 | 00/8006 | + 32 | 1 Conv3p.asm 32 | Comment | 11 | | 0 | 00/8006 | ** FPC to FP1 conversion ** + 33 | 1 Conv3p.asm 33 | Empty | 11 | | 0 | 00/8006 | + 34 | 1 Conv3p.asm 34 | Code | 11 | | 2 | 00/8006 : A5 9D | lda {$9D} + 35 | 1 Conv3p.asm 35 | Code | 11 | | 1 | 00/8008 : 3A | dec A ; dec the EXP + 36 | 1 Conv3p.asm 36 | Code | 11 | | 2 | 00/8009 : 85 FA | sta {$FA} + 37 | 1 Conv3p.asm 37 | Code | 11 | | 2 | 00/800B : 85 EC | sta {$EC} ; Copy + 38 | 1 Conv3p.asm 38 | Empty | 11 | | 0 | 00/800D | + 39 | 1 Conv3p.asm 39 | Code | 11 | | 2 | 00/800D : A5 A2 | lda {$9D}+5 + 40 | 1 Conv3p.asm 40 | Code | 11 | | 2 | 00/800F : 30 0D | bmi NEG ; chk the Hi bit of 1 byte Mantissa + 41 | 1 Conv3p.asm 41 | Empty | 11 | | 0 | 00/8011 | + 42 | 1 Conv3p.asm 42 | Code | 11 | | 1 | 00/8011 : 18 | POS clc ; Hi bit 0 for negative + 43 | 1 Conv3p.asm 43 | Code | 11 | | 2 | 00/8012 : A5 A2 | lda {$9D}+5 + 44 | 1 Conv3p.asm 44 | Empty | 11 | | 0 | 00/8014 | + 45 | 1 Conv3p.asm 45 | Code | 11 | | 2 | 00/8014 : 09 80 | ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + 46 | 1 Conv3p.asm 46 | Code | 11 | | 1 | 00/8016 : 6A | ror ; Didide for 2^1 + 47 | 1 Conv3p.asm 47 | Empty | 11 | | 0 | 00/8017 | + 48 | 1 Conv3p.asm 48 | Code | 11 | | 2 | 00/8017 : 85 FB | sta {$FA}+1 + 49 | 1 Conv3p.asm 49 | Code | 11 | | 2 | 00/8019 : 85 ED | sta {$EC}+1 ; Copy + 50 | 1 Conv3p.asm 50 | Empty | 11 | | 0 | 00/801B | + 51 | 1 Conv3p.asm 51 | Code | 11 | | 3 | 00/801B : 4C 2B 80 | jmp CONT + 52 | 1 Conv3p.asm 52 | Empty | 11 | | 0 | 00/801E | + 53 | 1 Conv3p.asm 53 | Code | 11 | | 1 | 00/801E : 18 | NEG clc ; Hi bit 1 for positive + 54 | 1 Conv3p.asm 54 | Code | 11 | | 2 | 00/801F : A5 A2 | lda {$9D}+5 + 55 | 1 Conv3p.asm 55 | Empty | 11 | | 0 | 00/8021 | + 56 | 1 Conv3p.asm 56 | Code | 11 | | 1 | 00/8021 : 6A | ror ; Didide for 2^1 + 57 | 1 Conv3p.asm 57 | Empty | 11 | | 0 | 00/8022 | + 58 | 1 Conv3p.asm 58 | Code | 11 | | 2 | 00/8022 : 49 FF | eor #$FF ; One's complement, NOT + 59 | 1 Conv3p.asm 59 | Code | 11 | | 1 | 00/8024 : 18 | clc + 60 | 1 Conv3p.asm 60 | Code | 11 | | 2 | 00/8025 : 69 01 | adc #01 ; Two's complement, +1 + 61 | 1 Conv3p.asm 61 | Empty | 11 | | 0 | 00/8027 | + 62 | 1 Conv3p.asm 62 | Code | 11 | | 2 | 00/8027 : 85 FB | sta {$FA}+1 + 63 | 1 Conv3p.asm 63 | Code | 11 | | 2 | 00/8029 : 85 ED | sta {$EC}+1 ; Copy + 64 | 1 Conv3p.asm 64 | Empty | 11 | | 0 | 00/802B | + 65 | 1 Conv3p.asm 65 | Code | 11 | | 2 | 00/802B : A5 9F | CONT lda {$9D}+2 + 66 | 1 Conv3p.asm 66 | Code | 11 | | 1 | 00/802D : 6A | ror + 67 | 1 Conv3p.asm 67 | Code | 11 | | 2 | 00/802E : 85 FC | sta {$FA}+2 + 68 | 1 Conv3p.asm 68 | Code | 11 | | 2 | 00/8030 : 85 EE | sta {$EC}+2 ; Copy + 69 | 1 Conv3p.asm 69 | Empty | 11 | | 0 | 00/8032 | + 70 | 1 Conv3p.asm 70 | Code | 11 | | 2 | 00/8032 : A5 A0 | lda {$9D}+3 + 71 | 1 Conv3p.asm 71 | Code | 11 | | 1 | 00/8034 : 6A | ror + 72 | 1 Conv3p.asm 72 | Code | 11 | | 2 | 00/8035 : 85 FD | sta {$FA}+3 + 73 | 1 Conv3p.asm 73 | Code | 11 | | 2 | 00/8037 : 85 EF | sta {$EC}+3 ; Copy FP2=FP1 X2=X1 + 74 | 1 Conv3p.asm 74 | Empty | 11 | | 0 | 00/8039 | + 75 | 1 Conv3p.asm 75 | Code | 11 | | 2 | 00/8039 : A5 A1 | lda {$9D}+4 + 76 | 1 Conv3p.asm 76 | Code | 11 | | 1 | 00/803B : 6A | ror + 77 | 1 Conv3p.asm 77 | Code | 11 | | 2 | 00/803C : 85 FE | sta {$FE} + 78 | 1 Conv3p.asm 78 | Empty | 11 | | 0 | 00/803E | + 79 | 1 Conv3p.asm 79 | Comment | 11 | | 0 | 00/803E | ;brk + 80 | 1 Conv3p.asm 80 | Code | 11 | | 1 | 00/803E : 60 | rts + 81 | 1 Conv3p.asm 81 | Empty | 11 | | 0 | 00/803F | + 82 | 1 Conv3p.asm 82 | Comment | 11 | | 0 | 00/803F | ************************************ + 83 | 1 Conv3p.asm 83 | Comment | 11 | | 0 | 00/803F | * FP1 TO FAC TO BASIC * + 84 | 1 Conv3p.asm 84 | Comment | 11 | | 0 | 00/803F | * CALL 32831,Y 831,Y * + 85 | 1 Conv3p.asm 85 | Comment | 11 | | 0 | 00/803F | * PRINT Y * + 86 | 1 Conv3p.asm 86 | Comment | 11 | | 0 | 00/803F | ************************************ + 87 | 1 Conv3p.asm 87 | Empty | 11 | | 0 | 00/803F | + 88 | 1 Conv3p.asm 88 | Comment | 11 | | 0 | 00/803F | * + 89 | 1 Conv3p.asm 89 | Comment | 11 | | 0 | 00/803F | ** FP1 to FAC conversion ** + 90 | 1 Conv3p.asm 90 | Comment | 11 | | 0 | 00/803F | * + 91 | 1 Conv3p.asm 91 | Code | 11 | | 3 | 00/803F : AD 00 70 | ENTRY2 lda {$7000} ; X1 1 Byte --> 9D FAC + 92 | 1 Conv3p.asm 92 | Code | 11 | | 1 | 00/8042 : 1A | inc A ; 2^(FP1+1) inc EXP + 93 | 1 Conv3p.asm 93 | Code | 11 | | 2 | 00/8043 : 85 9D | sta {$9D} + 94 | 1 Conv3p.asm 94 | Empty | 11 | | 0 | 00/8045 | + 95 | 1 Conv3p.asm 95 | Code | 11 | | 3 | 00/8045 : AD 01 70 | lda {$7000}+1 + 96 | 1 Conv3p.asm 96 | Code | 11 | | 2 | 00/8048 : 30 0C | bmi NEG2 ; chk the Hi bit of 1 byte Mantissa + 97 | 1 Conv3p.asm 97 | Empty | 11 | | 0 | 00/804A | + 98 | 1 Conv3p.asm 98 | Empty | 11 | | 0 | 00/804A | + 99 | 1 Conv3p.asm 99 | Code | 11 | | 1 | 00/804A : 18 | POS2 clc + 100 | 1 Conv3p.asm 100 | Code | 11 | | 3 | 00/804B : AD 01 70 | lda {$7000}+1 ; M1 Hi 2 Byte --> 9E FAC + 101 | 1 Conv3p.asm 101 | Code | 11 | | 1 | 00/804E : 2A | rol ; Multiply for 2^1 + 102 | 1 Conv3p.asm 102 | Empty | 11 | | 0 | 00/804F | + 103 | 1 Conv3p.asm 103 | Code | 11 | | 2 | 00/804F : 09 80 | ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + 104 | 1 Conv3p.asm 104 | Code | 11 | | 2 | 00/8051 : 85 9E | sta {$9D}+1 ; To 6^ Byte of FAC Unpacked + 105 | 1 Conv3p.asm 105 | Empty | 11 | | 0 | 00/8053 | + 106 | 1 Conv3p.asm 106 | Comment | 11 | | 0 | 00/8053 | ;sta FAC+5 ; To 1^ Byte Mantissa of FAC UnPacked + 107 | 1 Conv3p.asm 107 | Code | 11 | | 3 | 00/8053 : 4C 63 80 | jmp CONT2 + 108 | 1 Conv3p.asm 108 | Empty | 11 | | 0 | 00/8056 | + 109 | 1 Conv3p.asm 109 | Code | 11 | | 3 | 00/8056 : AD 01 70 | NEG2 lda {$7000}+1 + 110 | 1 Conv3p.asm 110 | Empty | 11 | | 0 | 00/8059 | + 111 | 1 Conv3p.asm 111 | Code | 11 | | 1 | 00/8059 : 38 | sec + 112 | 1 Conv3p.asm 112 | Code | 11 | | 2 | 00/805A : E9 01 | sbc #01 ; One's complement inv -1 + 113 | 1 Conv3p.asm 113 | Code | 11 | | 2 | 00/805C : 49 FF | eor #$FF ; Two's complement inv NOT + 114 | 1 Conv3p.asm 114 | Empty | 11 | | 0 | 00/805E | + 115 | 1 Conv3p.asm 115 | Code | 11 | | 1 | 00/805E : 2A | rol ; Multiply for 2^1 + 116 | 1 Conv3p.asm 116 | Empty | 11 | | 0 | 00/805F | + 117 | 1 Conv3p.asm 117 | Code | 11 | | 2 | 00/805F : 85 9E | sta {$9D}+1 ; To 1^ Byte Mantissa of FAC Packed + 118 | 1 Conv3p.asm 118 | Code | 11 | | 2 | 00/8061 : 85 A2 | sta {$9D}+5 ; To 6^ Byte of FAC Unpacked + 119 | 1 Conv3p.asm 119 | Empty | 11 | | 0 | 00/8063 | + 120 | 1 Conv3p.asm 120 | Empty | 11 | | 0 | 00/8063 | + 121 | 1 Conv3p.asm 121 | Code | 11 | | 3 | 00/8063 : AD 02 70 | CONT2 lda {$7000}+2 ; M1 3 Byte --> 9F FAC + 122 | 1 Conv3p.asm 122 | Code | 11 | | 1 | 00/8066 : 2A | rol + 123 | 1 Conv3p.asm 123 | Code | 11 | | 2 | 00/8067 : 85 9F | sta {$9D}+2 + 124 | 1 Conv3p.asm 124 | Empty | 11 | | 0 | 00/8069 | + 125 | 1 Conv3p.asm 125 | Code | 11 | | 3 | 00/8069 : AD 03 70 | lda {$7000}+3 ; M1 Lo 4 Byte --> A0 FAC + 126 | 1 Conv3p.asm 126 | Code | 11 | | 1 | 00/806C : 2A | rol + 127 | 1 Conv3p.asm 127 | Code | 11 | | 2 | 00/806D : 85 A0 | sta {$9D}+3 + 128 | 1 Conv3p.asm 128 | Empty | 11 | | 0 | 00/806F | + 129 | 1 Conv3p.asm 129 | Code | 11 | | 2 | 00/806F : A5 FE | lda {$FE} ; Extra 5 Byte --> A1 FAC + 130 | 1 Conv3p.asm 130 | Code | 11 | | 1 | 00/8071 : 2A | rol + 131 | 1 Conv3p.asm 131 | Code | 11 | | 2 | 00/8072 : 85 A1 | sta {$9D}+4 + 132 | 1 Conv3p.asm 132 | Empty | 11 | | 0 | 00/8074 | + 133 | 1 Conv3p.asm 133 | Comment | 11 | | 0 | 00/8074 | ;brk + 134 | 1 Conv3p.asm 134 | Comment | 11 | | 0 | 00/8074 | *************************** + 135 | 1 Conv3p.asm 135 | Comment | 11 | | 0 | 00/8074 | * + 136 | 1 Conv3p.asm 136 | Code | 11 | | 3 | 00/8074 : 20 BE DE | jsr {$DEBE} + 137 | 1 Conv3p.asm 137 | Code | 11 | | 3 | 00/8077 : 20 E3 DF | jsr {$DFE3} ; Return the Y and A pointing to the specific variabile + 138 | 1 Conv3p.asm 138 | Code | 11 | | 1 | 00/807A : AA | tax + 139 | 1 Conv3p.asm 139 | Code | 11 | | 3 | 00/807B : 20 2B EB | jsr {$EB2B} ;FAC->VARIABLE Y (5 Bytes Packed) + 140 | 1 Conv3p.asm 140 | Empty | 11 | | 0 | 00/807E | + 141 | 1 Conv3p.asm 141 | Comment | 11 | | 0 | 00/807E | ;brk + 142 | 1 Conv3p.asm 142 | Code | 11 | | 1 | 00/807E : 60 | rts + 143 | 1 Conv3p.asm 143 | Data | 11 | | 1 | 00/807F : 00 | chk +------+----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- diff --git a/AppleII/FP MUL new/UNIMULG.bas b/AppleII/FP MUL new/UNIMULG.bas new file mode 100644 index 0000000..e1a2419 --- /dev/null +++ b/AppleII/FP MUL new/UNIMULG.bas @@ -0,0 +1,15 @@ + 10 HOME + 15 PRINT CHR$ (4);"BLOAD UNIFP1" + 20 PRINT CHR$ (4);"BLOAD CONV3P" + 25 X = 1 + 30 CALL 32768,X + 35 CALL 24576 + 40 PRINT CHR$ (4);"BLOAD UNIFP2" + 45 HGR2 : HCOLOR= 3 + 50 FOR X = - 10 TO 10 STEP .2 + 55 CALL 32768,X + 60 CALL 24576 + 65 Y = PEEK (29) + 256 * PEEK (30) + 70 rem CALL 32831,Y + 75 HPLOT X * 5 + 140,Y + 10 + 80 NEXT \ No newline at end of file diff --git a/AppleII/FP MUL new/UNIMULG.txt b/AppleII/FP MUL new/UNIMULG.txt new file mode 100644 index 0000000..e1a2419 --- /dev/null +++ b/AppleII/FP MUL new/UNIMULG.txt @@ -0,0 +1,15 @@ + 10 HOME + 15 PRINT CHR$ (4);"BLOAD UNIFP1" + 20 PRINT CHR$ (4);"BLOAD CONV3P" + 25 X = 1 + 30 CALL 32768,X + 35 CALL 24576 + 40 PRINT CHR$ (4);"BLOAD UNIFP2" + 45 HGR2 : HCOLOR= 3 + 50 FOR X = - 10 TO 10 STEP .2 + 55 CALL 32768,X + 60 CALL 24576 + 65 Y = PEEK (29) + 256 * PEEK (30) + 70 rem CALL 32831,Y + 75 HPLOT X * 5 + 140,Y + 10 + 80 NEXT \ No newline at end of file diff --git a/AppleII/FP MUL new/UniFP1 b/AppleII/FP MUL new/UniFP1 new file mode 100644 index 0000000000000000000000000000000000000000..511b8b302d089d374fc7a05697ae517708533aea GIT binary patch literal 570 zcmZ8eO=uHA6rRmyW}#GA^k5Du14_=Ze_6p>jaU&|Ja~RC2oXGZsb?<}a@nwl2Js-4 z#S!+fkc!2Vx=k~)Nf22tLMwO?Ll6^}>XMQ+q?_84@9^<>-^cg<=rgG4^b@3eFu`v? z^8gNdcM&2&d!ud`!|i3dvPhTj&?LE5xVyAiun-?wGbTT zLn5XX%(sLH2h_kTKObSc!R1s(M61s5@yBj>0JMPb3mW4LeTr>0QI+-hx^I6l9Mwg! zsET$th(x0LF;N-GQ1!TVqpj~dqoSRvif*`{J?=;v+3jq-cCH-mM(<0_Qc#k$Q@M1p tXun>1!o>Pn& +* +* The target of this project is to use the Unidisk 3.5 drive to perform +* specific numerical routines (integers and floating point numbers) +* calculation in order to use it as a Apple II co-processor unit. +* +* Copyright (C) 2015 Riccardo Greco . +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* +* @com.wudsn.ide.asm.hardware=APPLE2 +* +* Protocol Converter Call + XC +ZPTempL equ $0006 ;Temporary zero page storage +ZPTempH equ $0007 +** Zero page storage ** +N1 equ $FA ;25 4 Byte FP FA--FD (FP1) +N2 equ $EC ;27 4 Byte FP EC--EF (FP2) +RSLT equ $1D ; $7000 ;29 +*** Monitor routines *** +COut equ $FDED ;Console output ASCII +CROut equ $FD8E ;Carriage return +** Command Code ** +StatusCmd equ 0 +** Status Code ** +* StatusDIB equ 3 +StatusUNI equ 5 +* +ControlCmd equ 4 +** Control Codes ** +Eject equ 4 +Run equ 5 +SetDWLoad equ 6 +DWLoad equ 7 +* + org $6000 +***************************************************** + +* +* Find a Protocol Converter in one of the slots. +START jsr FindPC + bcs Error +*** Eject *** + jsr Dispatch + dfb ControlCmd + dw E_JECT +*** Set Address *** + jsr Dispatch + dfb ControlCmd + dw SET_ADD +* + jsr EXEC ; Jump the Error routine + rts +********************************************* +Error equ * +* +* There is either no PC around, or there was no give message +* + ldx #0 +err1 equ * + lda Message,x + beq errout + jsr COut + inx + bne err1 +* +errout equ * + rts +* +Message asc 'NO PC OR NO DEVICE' + dfb $8D,0 +********************************************* +* + +** Set the Input Value first in Dynamic data ** + ** 4 Byte N1 to FP1 ** +EXEC lda N1 ;X1 + sta $6232 ; Absolute addressing + lda N1+1 ;M1 (1) + sta $6233 + lda N1+2 ;M1 (2) + sta $6234 + lda N1+3 ;M1 (3) + sta $6235 + + ** 4 Byte N2 to FP2 ** + lda N2 ;X2 + sta $6236 + lda N2+1 ;M2 (1) + sta $6237 + lda N2+2 ;M2 (2) + sta $6238 + lda N2+3 ;M2 (3) + sta $6239 + +*** Download *** + jsr Dispatch + dfb ControlCmd + dw DOWNLOAD +** Set Unidisk Registers ** +* ;First time execution + lda #$00 ; Target the first time entry point + sta LowPC_reg ; First time set init value of PC, just for the next execution +* The program begin to PC preset to $0500 * +* +** Execute ** + jsr Dispatch + dfb ControlCmd + dw EXE +** Read ** +READ jsr Dispatch + dfb StatusCmd + dw DParms + bcs Error +* +**** Store Output results in //c **** + +* First time execute * + * lda UNIAcc_reg + * sta RSLT + lda UNIX_reg + sta RSLT ; Store the result + lda UNIY_reg + sta RSLT+1 + +** Second time execute ** + lda #$3C ; Target the secont time entry point + sta LowPC_reg ; Second time set new value of PC +** Execute ** + jsr Dispatch + dfb ControlCmd + dw EXE +** Read ** + jsr Dispatch + dfb StatusCmd + dw DParms +* bcs Error + +* Second time execute only to read the latest Byte of FP1* + lda UNIAcc_reg + sta RSLT+3 +* + rts + +****************************************************** +FindPC equ * +* +* Search slot 7 to slot 1 looking for signature bytes +* + ldx #7 ;Do for seven slots + lda #$C7 + sta ZPTempH + lda #$00 + sta ZPTempL +* +newslot equ * + ldy #7 +* +again equ * + lda (ZPTempL),y + cmp sigtab,y ;One for byte signature + beq maybe ;Found one signature byte + dec ZPTempH + dex + bne newslot +* +* if we get here, no PC find + sec + rts +* +* if we get here, no byte find on PC +maybe equ * + dey + dey ;if N=1 then all sig bytes OK + bpl again +* Found PC interface. Set up call address. +* we already have high byte ($CN), we need low byte +* +foundPC equ * + lda #$FF + sta ZPTempL + ldy #0 ;For indirect load + lda (ZPTempL),y ;Get the byte +* +* Now the Acc has the low oreder ProDOS entry point. +* The PC entry is three locations past this ... +* + clc + adc #3 + sta ZPTempL +* +* Now ZPTempL has PC entry point. +* Return with carry clear. +* + clc + rts +*********************************************************** +* +* There are the PC signature bytes in their relative order. +* The $FF bytes are filler bytes and are not compared. +* +sigtab dfb $FF,$20,$FF,$00 + dfb $FF,$03,$FF,$00 +* +Dispatch equ * + jmp (ZPTempL) ;Simulate an indirect JSR to PC +* +*** Status Parameter Set for UNI *** +DParms equ * +DPParmsCt dfb 3 ;Status calls have three parameters +DPUnit dfb 1 +DPBuffer dw UNI +DPStatCode dfb StatusUNI +* +* +* +*** Status List UNI *** +UNI equ * + dfb 0 +UNIError dfb 0 +UNIRetries dfb 0 +UNIAcc_reg dfb 0 +UNIX_reg dfb 0 +UNIY_reg dfb 0 +UNIP_val dfb 0 +HHH dfb 0 +* +*** Set Address *** +SET_ADD equ * + dfb 3 + dfb 1 + dw CNTL_LIST3 + dfb SetDWLoad +* +*** Download *** +DOWNLOAD equ * + dfb 3 + dfb 1 + dw CNTL_LIST4 + dfb DWLoad +* +*** Execute *** +EXE equ * + dfb 3 + dfb 1 + dw CNTL_LIST2 + dfb Run +*** Eject *** +E_JECT equ * + dfb 3 + dfb 1 + dw CNTL_LIST1 + dfb Eject +* +******** CONTROL LISTS ******** +* +* +*** Eject *** +CNTL_LIST1 equ * + dw $0000 +* +*** Execute *** +CNTL_LIST2 equ * +Clow_byte dfb $06 +Chigh_byte dfb $00 +AccValue dfb $00 ; Init Value Unidisk Accumulator Register +X_reg dfb $00 ; Init Value Unidisk X Register +Y_reg dfb $00 ; Init Value Unidisk Y Register +ProStatus dfb $00 ; Init Value Unidisk Status Register +LowPC_reg dfb $00 ; Init Value Unidisk Program Counter $0500 at eny dowload +HighPC_reg dfb $05 ; $05 first execution, $3C second execution +* +*** Set Address *** +CNTL_LIST3 equ * +CountL_byte dfb $02 +CountH_byte dfb $00 +LByte_Addr dfb $00 ; ORG of Unidisk program, set begin program address $0500 +HByte_Addr dfb $05 +* +*** Download *** +CNTL_LIST4 equ * +LenghtL_byte dfb $37 ;<----- Lenght of Unidisk program Lo - Byte 312 byte +LenghtH_byte dfb $01 ;<----- Lenght of Unidisk program Hi Byte +* +**************** Start UNIDISK Program **************** +* + org $0500 ; Start Unidisk program address + +SIGN EQU $C0 ;$EB ; $F3 + + ** FP2 4 Bytes ** +X2 EQU $C1 ;$EC ; $F4 +M2 EQU $C2 ;$ED ; $F5 - $F7 + + ** FP1 4 Bytes + E extension ** +X1 EQU $C5 ;$FA ; $F8 +M1 EQU $C6 ;$FB ; $F9 - $FB +E EQU $C9 ;$FE ; $FC + +OVLOC EQU $C10 ;$3F5 ;Overflow routine is not implemented at now) + +* +** Main program ** +* +** Input data to Zero Page ** + + ** FP1 ** + lda FP1 + sta X1 + + lda FP1+1 + sta M1 + lda FP1+2 + sta M1+1 + lda FP1+3 + sta M1+2 + + ** FP2 ** + lda FP2 + sta X2 + + lda FP2+1 + sta M2 + lda FP2+2 + sta M2+1 + lda FP2+3 + sta M2+2 + +************************** Target Function *********************** +* Y=N*N * +****************************************************************** +* +** Simple MUL y=x*x ** + jsr FMUL ;FMUL ; Call FP routine + + jsr FIX ;FIX Call FP to INT routine M1=HI-Byte M1+1=Low-Byte + + +*** Output Data result FP1 to Unidisk registers First Time first 3 Byte out *** + lda X1 + ldx M1 + ldy M1+1 + + rts +*** Output Data result FP1 to Unidisk registers Second Time latest 1 Byte out *** +SECOND lda M1+2 ; Entry point by Program Counter set + + rts +*************************************************** +* +***************** FP Routine ***************** +* + *********************** + * * + * APPLE-II FLOATING * + * POINT ROUTINES * + * * + * COPYRIGHT 1977 BY * + * APPLE COMPUTER INC. * + * * + * ALL RIGHTS RESERVED * + * * + * S. WOZNIAK * + * * + *********************** +* TITLE "FLOATING POINT ROUTINES for Unidisk memory" +* + +ADD CLC ;CLEAR CARRY + LDX #$2 ;INDEX FOR 3-BYTE ADD. +ADD1 LDA M1,X + ADC M2,X ;ADD A BYTE OF MANT2 TO MANT1 + STA M1,X + DEX ;INDEX TO NEXT MORE SIGNIF. BYTE. + BPL ADD1 ;LOOP UNTIL DONE. + RTS ;RETURN +MD1 ASL SIGN ;CLEAR LSB OF SIGN. + JSR ABSWAP ;ABS VAL OF M1, THEN SWAP WITH M2 +ABSWAP BIT M1 ;MANT1 NEGATIVE? + BPL ABSWAP1 ;NO, SWAP WITH MANT2 AND RETURN. + JSR FCOMPL ;YES, COMPLEMENT IT. + INC SIGN ;INCR SIGN, COMPLEMENTING LSB. +ABSWAP1 SEC ;SET CARRY FOR RETURN TO MUL/DIV. +SWAP LDX #$4 ;INDEX FOR 4 BYTE SWAP. +SWAP1 STY E-1,X + LDA X1-1,X ;SWAP A BYTE OF EXP/MANT1 WITH + LDY X2-1,X ;EXP/MANT2 AND LEAVE A COPY OF + STY X1-1,X ;MANT1 IN E (3 BYTES). E+3 USED + STA X2-1,X + DEX ;ADVANCE INDEX TO NEXT BYTE + BNE SWAP1 ;LOOP UNTIL DONE. + RTS ;RETURN +FLOAT LDA #$8E ;INIT EXP1 TO 14, <--------------- int to fp + STA X1 ;THEN NORMALIZE TO FLOAT. +NORM1 LDA M1 ;HIGH-ORDER MANT1 BYTE. + CMP #$C0 ;UPPER TWO BITS UNEQUAL? + BMI RTS1 ;YES, RETURN WITH MANT1 NORMALIZED + DEC X1 ;DECREMENT EXP1. + ASL M1+2 + ROL M1+1 ;SHIFT MANT1 (3 BYTES) LEFT. + ROL M1 +NORM LDA X1 ;EXP1 ZERO? + BNE NORM1 ;NO, CONTINUE NORMALIZING. +RTS1 RTS ;RETURN. +FSUB JSR FCOMPL ;CMPL MANT1,CLEARS CARRY UNLESS 0 <---- sub +SWPALGN JSR ALGNSWP ;RIGHT SHIFT MANT1 OR SWAP WITH +FADD LDA X2 ;<------------------------------------- add + CMP X1 ;COMPARE EXP1 WITH EXP2. + BNE SWPALGN ;IF #,SWAP ADDENDS OR ALIGN MANTS. + JSR ADD ;ADD ALIGNED MANTISSAS. +ADDEND BVC NORM ;NO OVERFLOW, NORMALIZE RESULT. + BVS RTLOG ;OV: SHIFT M1 RIGHT, CARRY INTO SIGN +ALGNSWP BCC SWAP ;SWAP IF CARRY CLEAR, + * ELSE SHIFT RIGHT ARITH. +RTAR LDA M1 ;SIGN OF MANT1 INTO CARRY FOR + ASL ;RIGHT ARITH SHIFT. +RTLOG INC X1 ;INCR X1 TO ADJUST FOR RIGHT SHIFT + BEQ OVFL ;EXP1 OUT OF RANGE. +RTLOG1 LDX #$FA ;INDEX FOR 6:BYTE RIGHT SHIFT. +ROR1 ROR E+3,X + INX ;NEXT BYTE OF SHIFT. + BNE ROR1 ;LOOP UNTIL DONE. + RTS ;RETURN. +FMUL JSR MD1 ;ABS VAL OF MANT1, MANT2 <-------------- mul + ADC X1 ;ADD EXP1 TO EXP2 FOR PRODUCT EXP + JSR MD2 ;CHECK PROD. EXP AND PREP. FOR MUL + CLC ;CLEAR CARRY FOR FIRST BIT. +MUL1 JSR RTLOG1 ;M1 AND E RIGHT (PROD AND MPLIER) + BCC MUL2 ;IF CARRY CLEAR, SKIP PARTIAL PROD + JSR ADD ;ADD MULTIPLICAND TO PRODUCT. +MUL2 DEY ;NEXT MUL ITERATION. + BPL MUL1 ;LOOP UNTIL DONE. +MDEND LSR SIGN ;TEST SIGN LSB. +NORMX BCC NORM ;IF EVEN,NORMALIZE PROD,ELSE COMP +FCOMPL SEC ;SET CARRY FOR SUBTRACT. <--------------- not + LDX #$3 ;INDEX FOR 3 BYTE SUBTRACT. +COMPL1 LDA #$0 ;CLEAR A. + SBC X1,X ;SUBTRACT BYTE OF EXP1. + STA X1,X ;RESTORE IT. + DEX ;NEXT MORE SIGNIFICANT BYTE. + BNE COMPL1 ;LOOP UNTIL DONE. + BEQ ADDEND ;NORMALIZE (OR SHIFT RT IF OVFL). +FDIV JSR MD1 ;TAKE ABS VAL OF MANT1, MANT2. <--------- div + SBC X1 ;SUBTRACT EXP1 FROM EXP2. + JSR MD2 ;SAVE AS QUOTIENT EXP. +DIV1 SEC ;SET CARRY FOR SUBTRACT. + LDX #$2 ;INDEX FOR 3-BYTE SUBTRACTION. +DIV2 LDA M2,X + SBC E,X ;SUBTRACT A BYTE OF E FROM MANT2. + PHA ;SAVE ON STACK. + DEX ;NEXT MORE SIGNIFICANT BYTE. + BPL DIV2 ;LOOP UNTIL DONE. + LDX #$FD ;INDEX FOR 3-BYTE CONDITIONAL MOVE +DIV3 PLA ;PULL BYTE OF DIFFERENCE OFF STACK + BCC DIV4 ;IF M2 + 3 | 1 UniFP1.asm 3 | Comment | 11 | | 0 | 00/8000 | * + 4 | 1 UniFP1.asm 4 | Comment | 11 | | 0 | 00/8000 | * The target of this project is to use the Unidisk 3.5 drive to perform + 5 | 1 UniFP1.asm 5 | Comment | 11 | | 0 | 00/8000 | * specific numerical routines (integers and floating point numbers) + 6 | 1 UniFP1.asm 6 | Comment | 11 | | 0 | 00/8000 | * calculation in order to use it as a Apple II co-processor unit. + 7 | 1 UniFP1.asm 7 | Comment | 11 | | 0 | 00/8000 | * + 8 | 1 UniFP1.asm 8 | Comment | 11 | | 0 | 00/8000 | * Copyright (C) 2015 Riccardo Greco . + 9 | 1 UniFP1.asm 9 | Comment | 11 | | 0 | 00/8000 | * + 10 | 1 UniFP1.asm 10 | Comment | 11 | | 0 | 00/8000 | * This program is free software: you can redistribute it and/or modify + 11 | 1 UniFP1.asm 11 | Comment | 11 | | 0 | 00/8000 | * it under the terms of the GNU General Public License as published by + 12 | 1 UniFP1.asm 12 | Comment | 11 | | 0 | 00/8000 | * the Free Software Foundation, either version 3 of the License, or + 13 | 1 UniFP1.asm 13 | Comment | 11 | | 0 | 00/8000 | * (at your option) any later version. + 14 | 1 UniFP1.asm 14 | Comment | 11 | | 0 | 00/8000 | * This program is distributed in the hope that it will be useful, + 15 | 1 UniFP1.asm 15 | Comment | 11 | | 0 | 00/8000 | * but WITHOUT ANY WARRANTY; without even the implied warranty of + 16 | 1 UniFP1.asm 16 | Comment | 11 | | 0 | 00/8000 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 17 | 1 UniFP1.asm 17 | Comment | 11 | | 0 | 00/8000 | * GNU General Public License for more details. + 18 | 1 UniFP1.asm 18 | Comment | 11 | | 0 | 00/8000 | * You should have received a copy of the GNU General Public License + 19 | 1 UniFP1.asm 19 | Comment | 11 | | 0 | 00/8000 | * along with this program. If not, see . + 20 | 1 UniFP1.asm 20 | Comment | 11 | | 0 | 00/8000 | * + 21 | 1 UniFP1.asm 21 | Comment | 11 | | 0 | 00/8000 | * + 22 | 1 UniFP1.asm 22 | Comment | 11 | | 0 | 00/8000 | * @com.wudsn.ide.asm.hardware=APPLE2 + 23 | 1 UniFP1.asm 23 | Comment | 11 | | 0 | 00/8000 | * + 24 | 1 UniFP1.asm 24 | Comment | 11 | | 0 | 00/8000 | * Protocol Converter Call + 25 | 1 UniFP1.asm 25 | Directive | 11 | | 0 | 00/8000 | XC + 26 | 1 UniFP1.asm 26 | Equivalence | 11 | | 0 | 00/8000 | ZPTempL equ $0006 ;Temporary zero page storage + 27 | 1 UniFP1.asm 27 | Equivalence | 11 | | 0 | 00/8000 | ZPTempH equ $0007 + 28 | 1 UniFP1.asm 28 | Comment | 11 | | 0 | 00/8000 | ** Zero page storage ** + 29 | 1 UniFP1.asm 29 | Equivalence | 11 | | 0 | 00/8000 | N1 equ $FA ;25 4 Byte FP FA--FD (FP1) + 30 | 1 UniFP1.asm 30 | Equivalence | 11 | | 0 | 00/8000 | N2 equ $EC ;27 4 Byte FP EC--EF (FP2) + 31 | 1 UniFP1.asm 31 | Equivalence | 11 | | 0 | 00/8000 | RSLT equ $1D ; $7000 ;29 + 32 | 1 UniFP1.asm 32 | Comment | 11 | | 0 | 00/8000 | *** Monitor routines *** + 33 | 1 UniFP1.asm 33 | Equivalence | 11 | | 0 | 00/8000 | COut equ $FDED ;Console output ASCII + 34 | 1 UniFP1.asm 34 | Equivalence | 11 | | 0 | 00/8000 | CROut equ $FD8E ;Carriage return + 35 | 1 UniFP1.asm 35 | Comment | 11 | | 0 | 00/8000 | ** Command Code ** + 36 | 1 UniFP1.asm 36 | Equivalence | 11 | | 0 | 00/8000 | StatusCmd equ 0 + 37 | 1 UniFP1.asm 37 | Comment | 11 | | 0 | 00/8000 | ** Status Code ** + 38 | 1 UniFP1.asm 38 | Comment | 11 | | 0 | 00/8000 | * StatusDIB equ 3 + 39 | 1 UniFP1.asm 39 | Equivalence | 11 | | 0 | 00/8000 | StatusUNI equ 5 + 40 | 1 UniFP1.asm 40 | Comment | 11 | | 0 | 00/8000 | * + 41 | 1 UniFP1.asm 41 | Equivalence | 11 | | 0 | 00/8000 | ControlCmd equ 4 + 42 | 1 UniFP1.asm 42 | Comment | 11 | | 0 | 00/8000 | ** Control Codes ** + 43 | 1 UniFP1.asm 43 | Equivalence | 11 | | 0 | 00/8000 | Eject equ 4 + 44 | 1 UniFP1.asm 44 | Equivalence | 11 | | 0 | 00/8000 | Run equ 5 + 45 | 1 UniFP1.asm 45 | Equivalence | 11 | | 0 | 00/8000 | SetDWLoad equ 6 + 46 | 1 UniFP1.asm 46 | Equivalence | 11 | | 0 | 00/8000 | DWLoad equ 7 + 47 | 1 UniFP1.asm 47 | Comment | 11 | | 0 | 00/8000 | * + 48 | 1 UniFP1.asm 48 | Directive | 11 | | 0 | 00/8000 | org $6000 + 49 | 1 UniFP1.asm 49 | Comment | 11 | | 0 | 00/6000 | ***************************************************** + 50 | 1 UniFP1.asm 50 | Empty | 11 | | 0 | 00/6000 | + 51 | 1 UniFP1.asm 51 | Comment | 11 | | 0 | 00/6000 | * + 52 | 1 UniFP1.asm 52 | Comment | 11 | | 0 | 00/6000 | * Find a Protocol Converter in one of the slots. + 53 | 1 UniFP1.asm 53 | Code | 11 | | 3 | 00/6000 : 20 99 60 | START jsr {ozunid_4} + 54 | 1 UniFP1.asm 54 | Code | 11 | | 2 | 00/6003 : B0 10 | bcs {ozunid_1} + 55 | 1 UniFP1.asm 55 | Comment | 11 | | 0 | 00/6005 | *** Eject *** + 56 | 1 UniFP1.asm 56 | Code | 11 | | 3 | 00/6005 : 20 CE 60 | jsr {ozunid_9} + 57 | 1 UniFP1.asm 57 | Data | 11 | | 1 | 00/6008 : 04 | dfb {4} + 58 | 1 UniFP1.asm 58 | Data | 11 | | 2 | 00/6009 : ED 60 | dw {ozunid_15} + 59 | 1 UniFP1.asm 59 | Comment | 11 | | 0 | 00/600B | *** Set Address *** + 60 | 1 UniFP1.asm 60 | Code | 11 | | 3 | 00/600B : 20 CE 60 | jsr {ozunid_9} + 61 | 1 UniFP1.asm 61 | Data | 11 | | 1 | 00/600E : 04 | dfb {4} + 62 | 1 UniFP1.asm 62 | Data | 11 | | 2 | 00/600F : DE 60 | dw {ozunid_12} + 63 | 1 UniFP1.asm 63 | Comment | 11 | | 0 | 00/6011 | * + 64 | 1 UniFP1.asm 64 | Code | 11 | | 3 | 00/6011 : 20 37 60 | jsr EXEC ; Jump the Error routine + 65 | 1 UniFP1.asm 65 | Code | 11 | | 1 | 00/6014 : 60 | rts + 66 | 1 UniFP1.asm 66 | Comment | 11 | | 0 | 00/6015 | ********************************************* + 67 | 1 UniFP1.asm 67 | Empty | 11 | | 0 | 00/6015 | ozunid_1 + 68 | 1 UniFP1.asm 67 | Equivalence | 11 | | 0 | 00/6015 | Error equ ozunid_1 + 69 | 1 UniFP1.asm 68 | Comment | 11 | | 0 | 00/6015 | * + 70 | 1 UniFP1.asm 69 | Comment | 11 | | 0 | 00/6015 | * There is either no PC around, or there was no give message + 71 | 1 UniFP1.asm 70 | Comment | 11 | | 0 | 00/6015 | * + 72 | 1 UniFP1.asm 71 | Code | 11 | | 2 | 00/6015 : A2 00 | ldx #0 + 73 | 1 UniFP1.asm 72 | Empty | 11 | | 0 | 00/6017 | ozunid_2 + 74 | 1 UniFP1.asm 72 | Equivalence | 11 | | 0 | 00/6017 | err1 equ ozunid_2 + 75 | 1 UniFP1.asm 73 | Code | 11 | | 3 | 00/6017 : BD 23 60 | lda Message,x + 76 | 1 UniFP1.asm 74 | Code | 11 | | 2 | 00/601A : F0 06 | beq {ozunid_3} + 77 | 1 UniFP1.asm 75 | Code | 11 | | 3 | 00/601C : 20 ED FD | jsr {$FDED} + 78 | 1 UniFP1.asm 76 | Code | 11 | | 1 | 00/601F : E8 | inx + 79 | 1 UniFP1.asm 77 | Code | 11 | | 2 | 00/6020 : D0 F5 | bne {ozunid_2} + 80 | 1 UniFP1.asm 78 | Comment | 11 | | 0 | 00/6022 | * + 81 | 1 UniFP1.asm 79 | Empty | 11 | | 0 | 00/6022 | ozunid_3 + 82 | 1 UniFP1.asm 79 | Equivalence | 11 | | 0 | 00/6022 | errout equ ozunid_3 + 83 | 1 UniFP1.asm 80 | Code | 11 | | 1 | 00/6022 : 60 | rts + 84 | 1 UniFP1.asm 81 | Comment | 11 | | 0 | 00/6023 | * + 85 | 1 UniFP1.asm 82 | Data | 11 | | 18 | 00/6023 : 4E 4F 20 50 | Message asc 'NO PC OR NO DEVICE' + | | | | | | 43 20 4F 52 | + | | | | | | 20 4E 4F 20 | + | | | | | | 44 45 56 49 | + | | | | | | 43 45 | + 86 | 1 UniFP1.asm 83 | Data | 11 | | 2 | 00/6035 : 8D 00 | dfb $8D,0 + 87 | 1 UniFP1.asm 84 | Comment | 11 | | 0 | 00/6037 | ********************************************* + 88 | 1 UniFP1.asm 85 | Comment | 11 | | 0 | 00/6037 | * + 89 | 1 UniFP1.asm 86 | Empty | 11 | | 0 | 00/6037 | + 90 | 1 UniFP1.asm 87 | Comment | 11 | | 0 | 00/6037 | ** Set the Input Value first in Dynamic data ** + 91 | 1 UniFP1.asm 88 | Comment | 11 | | 0 | 00/6037 | ** 4 Byte N1 to FP1 ** + 92 | 1 UniFP1.asm 89 | Code | 11 | | 2 | 00/6037 : A5 FA | EXEC lda {$FA} ;X1 + 93 | 1 UniFP1.asm 90 | Code | 11 | | 3 | 00/6039 : 8D 32 62 | sta $6232 ; Absolute addressing + 94 | 1 UniFP1.asm 91 | Code | 11 | | 2 | 00/603C : A5 FB | lda {$FA}+1 ;M1 (1) + 95 | 1 UniFP1.asm 92 | Code | 11 | | 3 | 00/603E : 8D 33 62 | sta $6233 + 96 | 1 UniFP1.asm 93 | Code | 11 | | 2 | 00/6041 : A5 FC | lda {$FA}+2 ;M1 (2) + 97 | 1 UniFP1.asm 94 | Code | 11 | | 3 | 00/6043 : 8D 34 62 | sta $6234 + 98 | 1 UniFP1.asm 95 | Code | 11 | | 2 | 00/6046 : A5 FD | lda {$FA}+3 ;M1 (3) + 99 | 1 UniFP1.asm 96 | Code | 11 | | 3 | 00/6048 : 8D 35 62 | sta $6235 + 100 | 1 UniFP1.asm 97 | Empty | 11 | | 0 | 00/604B | + 101 | 1 UniFP1.asm 98 | Comment | 11 | | 0 | 00/604B | ** 4 Byte N2 to FP2 ** + 102 | 1 UniFP1.asm 99 | Code | 11 | | 2 | 00/604B : A5 EC | lda {$EC} ;X2 + 103 | 1 UniFP1.asm 100 | Code | 11 | | 3 | 00/604D : 8D 36 62 | sta $6236 + 104 | 1 UniFP1.asm 101 | Code | 11 | | 2 | 00/6050 : A5 ED | lda {$EC}+1 ;M2 (1) + 105 | 1 UniFP1.asm 102 | Code | 11 | | 3 | 00/6052 : 8D 37 62 | sta $6237 + 106 | 1 UniFP1.asm 103 | Code | 11 | | 2 | 00/6055 : A5 EE | lda {$EC}+2 ;M2 (2) + 107 | 1 UniFP1.asm 104 | Code | 11 | | 3 | 00/6057 : 8D 38 62 | sta $6238 + 108 | 1 UniFP1.asm 105 | Code | 11 | | 2 | 00/605A : A5 EF | lda {$EC}+3 ;M2 (3) + 109 | 1 UniFP1.asm 106 | Code | 11 | | 3 | 00/605C : 8D 39 62 | sta $6239 + 110 | 1 UniFP1.asm 107 | Empty | 11 | | 0 | 00/605F | + 111 | 1 UniFP1.asm 108 | Comment | 11 | | 0 | 00/605F | *** Download *** + 112 | 1 UniFP1.asm 109 | Code | 11 | | 3 | 00/605F : 20 CE 60 | jsr {ozunid_9} + 113 | 1 UniFP1.asm 110 | Data | 11 | | 1 | 00/6062 : 04 | dfb {4} + 114 | 1 UniFP1.asm 111 | Data | 11 | | 2 | 00/6063 : E3 60 | dw {ozunid_13} + 115 | 1 UniFP1.asm 112 | Comment | 11 | | 0 | 00/6065 | ** Set Unidisk Registers ** + 116 | 1 UniFP1.asm 113 | Comment | 11 | | 0 | 00/6065 | * ;First time execution + 117 | 1 UniFP1.asm 114 | Code | 11 | | 2 | 00/6065 : A9 00 | lda #$00 ; Target the first time entry point + 118 | 1 UniFP1.asm 115 | Code | 11 | | 3 | 00/6067 : 8D FA 60 | sta LowPC_reg ; First time set init value of PC, just for the next execution + 119 | 1 UniFP1.asm 116 | Comment | 11 | | 0 | 00/606A | * The program begin to PC preset to $0500 * + 120 | 1 UniFP1.asm 117 | Comment | 11 | | 0 | 00/606A | * + 121 | 1 UniFP1.asm 118 | Comment | 11 | | 0 | 00/606A | ** Execute ** + 122 | 1 UniFP1.asm 119 | Code | 11 | | 3 | 00/606A : 20 CE 60 | jsr {ozunid_9} + 123 | 1 UniFP1.asm 120 | Data | 11 | | 1 | 00/606D : 04 | dfb {4} + 124 | 1 UniFP1.asm 121 | Data | 11 | | 2 | 00/606E : E8 60 | dw {ozunid_14} + 125 | 1 UniFP1.asm 122 | Comment | 11 | | 0 | 00/6070 | ** Read ** + 126 | 1 UniFP1.asm 123 | Code | 11 | | 3 | 00/6070 : 20 CE 60 | READ jsr {ozunid_9} + 127 | 1 UniFP1.asm 124 | Data | 11 | | 1 | 00/6073 : 00 | dfb {0} + 128 | 1 UniFP1.asm 125 | Data | 11 | | 2 | 00/6074 : D1 60 | dw {ozunid_10} + 129 | 1 UniFP1.asm 126 | Code | 11 | | 2 | 00/6076 : B0 9D | bcs {ozunid_1} + 130 | 1 UniFP1.asm 127 | Comment | 11 | | 0 | 00/6078 | * + 131 | 1 UniFP1.asm 128 | Comment | 11 | | 0 | 00/6078 | **** Store Output results in //c **** + 132 | 1 UniFP1.asm 129 | Empty | 11 | | 0 | 00/6078 | + 133 | 1 UniFP1.asm 130 | Comment | 11 | | 0 | 00/6078 | * First time execute * + 134 | 1 UniFP1.asm 131 | Comment | 11 | | 0 | 00/6078 | * lda UNIAcc_reg + 135 | 1 UniFP1.asm 132 | Comment | 11 | | 0 | 00/6078 | * sta RSLT + 136 | 1 UniFP1.asm 133 | Code | 11 | | 3 | 00/6078 : AD DA 60 | lda UNIX_reg + 137 | 1 UniFP1.asm 134 | Code | 11 | | 2 | 00/607B : 85 1D | sta {$1D} ; Store the result + 138 | 1 UniFP1.asm 135 | Code | 11 | | 3 | 00/607D : AD DB 60 | lda UNIY_reg + 139 | 1 UniFP1.asm 136 | Code | 11 | | 2 | 00/6080 : 85 1E | sta {$1D}+1 + 140 | 1 UniFP1.asm 137 | Empty | 11 | | 0 | 00/6082 | + 141 | 1 UniFP1.asm 138 | Comment | 11 | | 0 | 00/6082 | ** Second time execute ** + 142 | 1 UniFP1.asm 139 | Code | 11 | | 2 | 00/6082 : A9 3C | lda #$3C ; Target the secont time entry point + 143 | 1 UniFP1.asm 140 | Code | 11 | | 3 | 00/6084 : 8D FA 60 | sta LowPC_reg ; Second time set new value of PC + 144 | 1 UniFP1.asm 141 | Comment | 11 | | 0 | 00/6087 | ** Execute ** + 145 | 1 UniFP1.asm 142 | Code | 11 | | 3 | 00/6087 : 20 CE 60 | jsr {ozunid_9} + 146 | 1 UniFP1.asm 143 | Data | 11 | | 1 | 00/608A : 04 | dfb {4} + 147 | 1 UniFP1.asm 144 | Data | 11 | | 2 | 00/608B : E8 60 | dw {ozunid_14} + 148 | 1 UniFP1.asm 145 | Comment | 11 | | 0 | 00/608D | ** Read ** + 149 | 1 UniFP1.asm 146 | Code | 11 | | 3 | 00/608D : 20 CE 60 | jsr {ozunid_9} + 150 | 1 UniFP1.asm 147 | Data | 11 | | 1 | 00/6090 : 00 | dfb {0} + 151 | 1 UniFP1.asm 148 | Data | 11 | | 2 | 00/6091 : D1 60 | dw {ozunid_10} + 152 | 1 UniFP1.asm 149 | Comment | 11 | | 0 | 00/6093 | * bcs Error + 153 | 1 UniFP1.asm 150 | Empty | 11 | | 0 | 00/6093 | + 154 | 1 UniFP1.asm 151 | Comment | 11 | | 0 | 00/6093 | * Second time execute only to read the latest Byte of FP1* + 155 | 1 UniFP1.asm 152 | Code | 11 | | 3 | 00/6093 : AD D9 60 | lda UNIAcc_reg + 156 | 1 UniFP1.asm 153 | Code | 11 | | 2 | 00/6096 : 85 20 | sta {$1D}+3 + 157 | 1 UniFP1.asm 154 | Comment | 11 | | 0 | 00/6098 | * + 158 | 1 UniFP1.asm 155 | Code | 11 | | 1 | 00/6098 : 60 | rts + 159 | 1 UniFP1.asm 156 | Empty | 11 | | 0 | 00/6099 | + 160 | 1 UniFP1.asm 157 | Comment | 11 | | 0 | 00/6099 | ****************************************************** + 161 | 1 UniFP1.asm 158 | Empty | 11 | | 0 | 00/6099 | ozunid_4 + 162 | 1 UniFP1.asm 158 | Equivalence | 11 | | 0 | 00/6099 | FindPC equ ozunid_4 + 163 | 1 UniFP1.asm 159 | Comment | 11 | | 0 | 00/6099 | * + 164 | 1 UniFP1.asm 160 | Comment | 11 | | 0 | 00/6099 | * Search slot 7 to slot 1 looking for signature bytes + 165 | 1 UniFP1.asm 161 | Comment | 11 | | 0 | 00/6099 | * + 166 | 1 UniFP1.asm 162 | Code | 11 | | 2 | 00/6099 : A2 07 | ldx #7 ;Do for seven slots + 167 | 1 UniFP1.asm 163 | Code | 11 | | 2 | 00/609B : A9 C7 | lda #$C7 + 168 | 1 UniFP1.asm 164 | Code | 11 | | 2 | 00/609D : 85 07 | sta {$0007} + 169 | 1 UniFP1.asm 165 | Code | 11 | | 2 | 00/609F : A9 00 | lda #$00 + 170 | 1 UniFP1.asm 166 | Code | 11 | | 2 | 00/60A1 : 85 06 | sta {$0006} + 171 | 1 UniFP1.asm 167 | Comment | 11 | | 0 | 00/60A3 | * + 172 | 1 UniFP1.asm 168 | Empty | 11 | | 0 | 00/60A3 | ozunid_5 + 173 | 1 UniFP1.asm 168 | Equivalence | 11 | | 0 | 00/60A3 | newslot equ ozunid_5 + 174 | 1 UniFP1.asm 169 | Code | 11 | | 2 | 00/60A3 : A0 07 | ldy #7 + 175 | 1 UniFP1.asm 170 | Comment | 11 | | 0 | 00/60A5 | * + 176 | 1 UniFP1.asm 171 | Empty | 11 | | 0 | 00/60A5 | ozunid_6 + 177 | 1 UniFP1.asm 171 | Equivalence | 11 | | 0 | 00/60A5 | again equ ozunid_6 + 178 | 1 UniFP1.asm 172 | Code | 11 | | 2 | 00/60A5 : B1 06 | lda ({$0006}),y + 179 | 1 UniFP1.asm 173 | Code | 11 | | 3 | 00/60A7 : D9 C6 60 | cmp sigtab,y ;One for byte signature + 180 | 1 UniFP1.asm 174 | Code | 11 | | 2 | 00/60AA : F0 07 | beq {ozunid_7} ;Found one signature byte + 181 | 1 UniFP1.asm 175 | Code | 11 | | 2 | 00/60AC : C6 07 | dec {$0007} + 182 | 1 UniFP1.asm 176 | Code | 11 | | 1 | 00/60AE : CA | dex + 183 | 1 UniFP1.asm 177 | Code | 11 | | 2 | 00/60AF : D0 F2 | bne {ozunid_5} + 184 | 1 UniFP1.asm 178 | Comment | 11 | | 0 | 00/60B1 | * + 185 | 1 UniFP1.asm 179 | Comment | 11 | | 0 | 00/60B1 | * if we get here, no PC find + 186 | 1 UniFP1.asm 180 | Code | 11 | | 1 | 00/60B1 : 38 | sec + 187 | 1 UniFP1.asm 181 | Code | 11 | | 1 | 00/60B2 : 60 | rts + 188 | 1 UniFP1.asm 182 | Comment | 11 | | 0 | 00/60B3 | * + 189 | 1 UniFP1.asm 183 | Comment | 11 | | 0 | 00/60B3 | * if we get here, no byte find on PC + 190 | 1 UniFP1.asm 184 | Empty | 11 | | 0 | 00/60B3 | ozunid_7 + 191 | 1 UniFP1.asm 184 | Equivalence | 11 | | 0 | 00/60B3 | maybe equ ozunid_7 + 192 | 1 UniFP1.asm 185 | Code | 11 | | 1 | 00/60B3 : 88 | dey + 193 | 1 UniFP1.asm 186 | Code | 11 | | 1 | 00/60B4 : 88 | dey ;if N=1 then all sig bytes OK + 194 | 1 UniFP1.asm 187 | Code | 11 | | 2 | 00/60B5 : 10 EE | bpl {ozunid_6} + 195 | 1 UniFP1.asm 188 | Comment | 11 | | 0 | 00/60B7 | * Found PC interface. Set up call address. + 196 | 1 UniFP1.asm 189 | Comment | 11 | | 0 | 00/60B7 | * we already have high byte ($CN), we need low byte + 197 | 1 UniFP1.asm 190 | Comment | 11 | | 0 | 00/60B7 | * + 198 | 1 UniFP1.asm 191 | Empty | 11 | | 0 | 00/60B7 | ozunid_8 + 199 | 1 UniFP1.asm 191 | Equivalence | 11 | | 0 | 00/60B7 | foundPC equ ozunid_8 + 200 | 1 UniFP1.asm 192 | Code | 11 | | 2 | 00/60B7 : A9 FF | lda #$FF + 201 | 1 UniFP1.asm 193 | Code | 11 | | 2 | 00/60B9 : 85 06 | sta {$0006} + 202 | 1 UniFP1.asm 194 | Code | 11 | | 2 | 00/60BB : A0 00 | ldy #0 ;For indirect load + 203 | 1 UniFP1.asm 195 | Code | 11 | | 2 | 00/60BD : B1 06 | lda ({$0006}),y ;Get the byte + 204 | 1 UniFP1.asm 196 | Comment | 11 | | 0 | 00/60BF | * + 205 | 1 UniFP1.asm 197 | Comment | 11 | | 0 | 00/60BF | * Now the Acc has the low oreder ProDOS entry point. + 206 | 1 UniFP1.asm 198 | Comment | 11 | | 0 | 00/60BF | * The PC entry is three locations past this ... + 207 | 1 UniFP1.asm 199 | Comment | 11 | | 0 | 00/60BF | * + 208 | 1 UniFP1.asm 200 | Code | 11 | | 1 | 00/60BF : 18 | clc + 209 | 1 UniFP1.asm 201 | Code | 11 | | 2 | 00/60C0 : 69 03 | adc #3 + 210 | 1 UniFP1.asm 202 | Code | 11 | | 2 | 00/60C2 : 85 06 | sta {$0006} + 211 | 1 UniFP1.asm 203 | Comment | 11 | | 0 | 00/60C4 | * + 212 | 1 UniFP1.asm 204 | Comment | 11 | | 0 | 00/60C4 | * Now ZPTempL has PC entry point. + 213 | 1 UniFP1.asm 205 | Comment | 11 | | 0 | 00/60C4 | * Return with carry clear. + 214 | 1 UniFP1.asm 206 | Comment | 11 | | 0 | 00/60C4 | * + 215 | 1 UniFP1.asm 207 | Code | 11 | | 1 | 00/60C4 : 18 | clc + 216 | 1 UniFP1.asm 208 | Code | 11 | | 1 | 00/60C5 : 60 | rts + 217 | 1 UniFP1.asm 209 | Comment | 11 | | 0 | 00/60C6 | *********************************************************** + 218 | 1 UniFP1.asm 210 | Comment | 11 | | 0 | 00/60C6 | * + 219 | 1 UniFP1.asm 211 | Comment | 11 | | 0 | 00/60C6 | * There are the PC signature bytes in their relative order. + 220 | 1 UniFP1.asm 212 | Comment | 11 | | 0 | 00/60C6 | * The $FF bytes are filler bytes and are not compared. + 221 | 1 UniFP1.asm 213 | Comment | 11 | | 0 | 00/60C6 | * + 222 | 1 UniFP1.asm 214 | Data | 11 | | 4 | 00/60C6 : FF 20 FF 00 | sigtab dfb $FF,$20,$FF,$00 + 223 | 1 UniFP1.asm 215 | Data | 11 | | 4 | 00/60CA : FF 03 FF 00 | dfb $FF,$03,$FF,$00 + 224 | 1 UniFP1.asm 216 | Comment | 11 | | 0 | 00/60CE | * + 225 | 1 UniFP1.asm 217 | Empty | 11 | | 0 | 00/60CE | ozunid_9 + 226 | 1 UniFP1.asm 217 | Equivalence | 11 | | 0 | 00/60CE | Dispatch equ ozunid_9 + 227 | 1 UniFP1.asm 218 | Code | 11 | | 3 | 00/60CE : 6C 06 00 | jmp ({$0006}) ;Simulate an indirect JSR to PC + 228 | 1 UniFP1.asm 219 | Comment | 11 | | 0 | 00/60D1 | * + 229 | 1 UniFP1.asm 220 | Comment | 11 | | 0 | 00/60D1 | *** Status Parameter Set for UNI *** + 230 | 1 UniFP1.asm 221 | Empty | 11 | | 0 | 00/60D1 | ozunid_10 + 231 | 1 UniFP1.asm 221 | Equivalence | 11 | | 0 | 00/60D1 | DParms equ ozunid_10 + 232 | 1 UniFP1.asm 222 | Data | 11 | | 1 | 00/60D1 : 03 | DPParmsCt dfb 3 ;Status calls have three parameters + 233 | 1 UniFP1.asm 223 | Data | 11 | | 1 | 00/60D2 : 01 | DPUnit dfb 1 + 234 | 1 UniFP1.asm 224 | Data | 11 | | 2 | 00/60D3 : D6 60 | DPBuffer dw {ozunid_11} + 235 | 1 UniFP1.asm 225 | Data | 11 | | 1 | 00/60D5 : 05 | DPStatCode dfb {5} + 236 | 1 UniFP1.asm 226 | Comment | 11 | | 0 | 00/60D6 | * + 237 | 1 UniFP1.asm 227 | Comment | 11 | | 0 | 00/60D6 | * + 238 | 1 UniFP1.asm 228 | Comment | 11 | | 0 | 00/60D6 | * + 239 | 1 UniFP1.asm 229 | Comment | 11 | | 0 | 00/60D6 | *** Status List UNI *** + 240 | 1 UniFP1.asm 230 | Empty | 11 | | 0 | 00/60D6 | ozunid_11 + 241 | 1 UniFP1.asm 230 | Equivalence | 11 | | 0 | 00/60D6 | UNI equ ozunid_11 + 242 | 1 UniFP1.asm 231 | Data | 11 | | 1 | 00/60D6 : 00 | dfb 0 + 243 | 1 UniFP1.asm 232 | Data | 11 | | 1 | 00/60D7 : 00 | UNIError dfb 0 + 244 | 1 UniFP1.asm 233 | Data | 11 | | 1 | 00/60D8 : 00 | UNIRetries dfb 0 + 245 | 1 UniFP1.asm 234 | Data | 11 | | 1 | 00/60D9 : 00 | UNIAcc_reg dfb 0 + 246 | 1 UniFP1.asm 235 | Data | 11 | | 1 | 00/60DA : 00 | UNIX_reg dfb 0 + 247 | 1 UniFP1.asm 236 | Data | 11 | | 1 | 00/60DB : 00 | UNIY_reg dfb 0 + 248 | 1 UniFP1.asm 237 | Data | 11 | | 1 | 00/60DC : 00 | UNIP_val dfb 0 + 249 | 1 UniFP1.asm 238 | Data | 11 | | 1 | 00/60DD : 00 | HHH dfb 0 + 250 | 1 UniFP1.asm 239 | Comment | 11 | | 0 | 00/60DE | * + 251 | 1 UniFP1.asm 240 | Comment | 11 | | 0 | 00/60DE | *** Set Address *** + 252 | 1 UniFP1.asm 241 | Empty | 11 | | 0 | 00/60DE | ozunid_12 + 253 | 1 UniFP1.asm 241 | Equivalence | 11 | | 0 | 00/60DE | SET_ADD equ ozunid_12 + 254 | 1 UniFP1.asm 242 | Data | 11 | | 1 | 00/60DE : 03 | dfb 3 + 255 | 1 UniFP1.asm 243 | Data | 11 | | 1 | 00/60DF : 01 | dfb 1 + 256 | 1 UniFP1.asm 244 | Data | 11 | | 2 | 00/60E0 : FC 60 | dw {ozunid_18} + 257 | 1 UniFP1.asm 245 | Data | 11 | | 1 | 00/60E2 : 06 | dfb {6} + 258 | 1 UniFP1.asm 246 | Comment | 11 | | 0 | 00/60E3 | * + 259 | 1 UniFP1.asm 247 | Comment | 11 | | 0 | 00/60E3 | *** Download *** + 260 | 1 UniFP1.asm 248 | Empty | 11 | | 0 | 00/60E3 | ozunid_13 + 261 | 1 UniFP1.asm 248 | Equivalence | 11 | | 0 | 00/60E3 | DOWNLOAD equ ozunid_13 + 262 | 1 UniFP1.asm 249 | Data | 11 | | 1 | 00/60E3 : 03 | dfb 3 + 263 | 1 UniFP1.asm 250 | Data | 11 | | 1 | 00/60E4 : 01 | dfb 1 + 264 | 1 UniFP1.asm 251 | Data | 11 | | 2 | 00/60E5 : 00 61 | dw {ozunid_19} + 265 | 1 UniFP1.asm 252 | Data | 11 | | 1 | 00/60E7 : 07 | dfb {7} + 266 | 1 UniFP1.asm 253 | Comment | 11 | | 0 | 00/60E8 | * + 267 | 1 UniFP1.asm 254 | Comment | 11 | | 0 | 00/60E8 | *** Execute *** + 268 | 1 UniFP1.asm 255 | Empty | 11 | | 0 | 00/60E8 | ozunid_14 + 269 | 1 UniFP1.asm 255 | Equivalence | 11 | | 0 | 00/60E8 | EXE equ ozunid_14 + 270 | 1 UniFP1.asm 256 | Data | 11 | | 1 | 00/60E8 : 03 | dfb 3 + 271 | 1 UniFP1.asm 257 | Data | 11 | | 1 | 00/60E9 : 01 | dfb 1 + 272 | 1 UniFP1.asm 258 | Data | 11 | | 2 | 00/60EA : F4 60 | dw {ozunid_17} + 273 | 1 UniFP1.asm 259 | Data | 11 | | 1 | 00/60EC : 05 | dfb {5} + 274 | 1 UniFP1.asm 260 | Comment | 11 | | 0 | 00/60ED | *** Eject *** + 275 | 1 UniFP1.asm 261 | Empty | 11 | | 0 | 00/60ED | ozunid_15 + 276 | 1 UniFP1.asm 261 | Equivalence | 11 | | 0 | 00/60ED | E_JECT equ ozunid_15 + 277 | 1 UniFP1.asm 262 | Data | 11 | | 1 | 00/60ED : 03 | dfb 3 + 278 | 1 UniFP1.asm 263 | Data | 11 | | 1 | 00/60EE : 01 | dfb 1 + 279 | 1 UniFP1.asm 264 | Data | 11 | | 2 | 00/60EF : F2 60 | dw {ozunid_16} + 280 | 1 UniFP1.asm 265 | Data | 11 | | 1 | 00/60F1 : 04 | dfb {4} + 281 | 1 UniFP1.asm 266 | Comment | 11 | | 0 | 00/60F2 | * + 282 | 1 UniFP1.asm 267 | Comment | 11 | | 0 | 00/60F2 | ******** CONTROL LISTS ******** + 283 | 1 UniFP1.asm 268 | Comment | 11 | | 0 | 00/60F2 | * + 284 | 1 UniFP1.asm 269 | Comment | 11 | | 0 | 00/60F2 | * + 285 | 1 UniFP1.asm 270 | Comment | 11 | | 0 | 00/60F2 | *** Eject *** + 286 | 1 UniFP1.asm 271 | Empty | 11 | | 0 | 00/60F2 | ozunid_16 + 287 | 1 UniFP1.asm 271 | Equivalence | 11 | | 0 | 00/60F2 | CNTL_LIST1 equ ozunid_16 + 288 | 1 UniFP1.asm 272 | Data | 11 | | 2 | 00/60F2 : 00 00 | dw $0000 + 289 | 1 UniFP1.asm 273 | Comment | 11 | | 0 | 00/60F4 | * + 290 | 1 UniFP1.asm 274 | Comment | 11 | | 0 | 00/60F4 | *** Execute *** + 291 | 1 UniFP1.asm 275 | Empty | 11 | | 0 | 00/60F4 | ozunid_17 + 292 | 1 UniFP1.asm 275 | Equivalence | 11 | | 0 | 00/60F4 | CNTL_LIST2 equ ozunid_17 + 293 | 1 UniFP1.asm 276 | Data | 11 | | 1 | 00/60F4 : 06 | Clow_byte dfb $06 + 294 | 1 UniFP1.asm 277 | Data | 11 | | 1 | 00/60F5 : 00 | Chigh_byte dfb $00 + 295 | 1 UniFP1.asm 278 | Data | 11 | | 1 | 00/60F6 : 00 | AccValue dfb $00 ; Init Value Unidisk Accumulator Register + 296 | 1 UniFP1.asm 279 | Data | 11 | | 1 | 00/60F7 : 00 | X_reg dfb $00 ; Init Value Unidisk X Register + 297 | 1 UniFP1.asm 280 | Data | 11 | | 1 | 00/60F8 : 00 | Y_reg dfb $00 ; Init Value Unidisk Y Register + 298 | 1 UniFP1.asm 281 | Data | 11 | | 1 | 00/60F9 : 00 | ProStatus dfb $00 ; Init Value Unidisk Status Register + 299 | 1 UniFP1.asm 282 | Data | 11 | | 1 | 00/60FA : 00 | LowPC_reg dfb $00 ; Init Value Unidisk Program Counter $0500 at eny dowload + 300 | 1 UniFP1.asm 283 | Data | 11 | | 1 | 00/60FB : 05 | HighPC_reg dfb $05 ; $05 first execution, $3C second execution + 301 | 1 UniFP1.asm 284 | Comment | 11 | | 0 | 00/60FC | * + 302 | 1 UniFP1.asm 285 | Comment | 11 | | 0 | 00/60FC | *** Set Address *** + 303 | 1 UniFP1.asm 286 | Empty | 11 | | 0 | 00/60FC | ozunid_18 + 304 | 1 UniFP1.asm 286 | Equivalence | 11 | | 0 | 00/60FC | CNTL_LIST3 equ ozunid_18 + 305 | 1 UniFP1.asm 287 | Data | 11 | | 1 | 00/60FC : 02 | CountL_byte dfb $02 + 306 | 1 UniFP1.asm 288 | Data | 11 | | 1 | 00/60FD : 00 | CountH_byte dfb $00 + 307 | 1 UniFP1.asm 289 | Data | 11 | | 1 | 00/60FE : 00 | LByte_Addr dfb $00 ; ORG of Unidisk program, set begin program address $0500 + 308 | 1 UniFP1.asm 290 | Data | 11 | | 1 | 00/60FF : 05 | HByte_Addr dfb $05 + 309 | 1 UniFP1.asm 291 | Comment | 11 | | 0 | 00/6100 | * + 310 | 1 UniFP1.asm 292 | Comment | 11 | | 0 | 00/6100 | *** Download *** + 311 | 1 UniFP1.asm 293 | Empty | 11 | | 0 | 00/6100 | ozunid_19 + 312 | 1 UniFP1.asm 293 | Equivalence | 11 | | 0 | 00/6100 | CNTL_LIST4 equ ozunid_19 + 313 | 1 UniFP1.asm 294 | Data | 11 | | 1 | 00/6100 : 37 | LenghtL_byte dfb $37 ;<----- Lenght of Unidisk program Lo - Byte 312 byte + 314 | 1 UniFP1.asm 295 | Data | 11 | | 1 | 00/6101 : 01 | LenghtH_byte dfb $01 ;<----- Lenght of Unidisk program Hi Byte + 315 | 1 UniFP1.asm 296 | Comment | 11 | | 0 | 00/6102 | * + 316 | 1 UniFP1.asm 297 | Comment | 11 | | 0 | 00/6102 | **************** Start UNIDISK Program **************** + 317 | 1 UniFP1.asm 298 | Comment | 11 | | 0 | 00/6102 | * + 318 | 1 UniFP1.asm 299 | Directive | 11 | | 0 | 00/6102 | org $0500 ; Start Unidisk program address + 319 | 1 UniFP1.asm 300 | Empty | 11 | | 0 | 00/0500 | + 320 | 1 UniFP1.asm 301 | Equivalence | 11 | | 0 | 00/0500 | SIGN EQU $C0 ;$EB ; $F3 + 321 | 1 UniFP1.asm 302 | Empty | 11 | | 0 | 00/0500 | + 322 | 1 UniFP1.asm 303 | Comment | 11 | | 0 | 00/0500 | ** FP2 4 Bytes ** + 323 | 1 UniFP1.asm 304 | Equivalence | 11 | | 0 | 00/0500 | X2 EQU $C1 ;$EC ; $F4 + 324 | 1 UniFP1.asm 305 | Equivalence | 11 | | 0 | 00/0500 | M2 EQU $C2 ;$ED ; $F5 - $F7 + 325 | 1 UniFP1.asm 306 | Empty | 11 | | 0 | 00/0500 | + 326 | 1 UniFP1.asm 307 | Comment | 11 | | 0 | 00/0500 | ** FP1 4 Bytes + E extension ** + 327 | 1 UniFP1.asm 308 | Equivalence | 11 | | 0 | 00/0500 | X1 EQU $C5 ;$FA ; $F8 + 328 | 1 UniFP1.asm 309 | Equivalence | 11 | | 0 | 00/0500 | M1 EQU $C6 ;$FB ; $F9 - $FB + 329 | 1 UniFP1.asm 310 | Equivalence | 11 | | 0 | 00/0500 | E EQU $C9 ;$FE ; $FC + 330 | 1 UniFP1.asm 311 | Empty | 11 | | 0 | 00/0500 | + 331 | 1 UniFP1.asm 312 | Equivalence | 11 | | 0 | 00/0500 | OVLOC EQU $C10 ;$3F5 ;Overflow routine is not implemented at now) + 332 | 1 UniFP1.asm 313 | Empty | 11 | | 0 | 00/0500 | + 333 | 1 UniFP1.asm 314 | Comment | 11 | | 0 | 00/0500 | * + 334 | 1 UniFP1.asm 315 | Comment | 11 | | 0 | 00/0500 | ** Main program ** + 335 | 1 UniFP1.asm 316 | Comment | 11 | | 0 | 00/0500 | * + 336 | 1 UniFP1.asm 317 | Comment | 11 | | 0 | 00/0500 | ** Input data to Zero Page ** + 337 | 1 UniFP1.asm 318 | Empty | 11 | | 0 | 00/0500 | + 338 | 1 UniFP1.asm 319 | Comment | 11 | | 0 | 00/0500 | ** FP1 ** + 339 | 1 UniFP1.asm 320 | Code | 11 | | 3 | 00/0500 : AD 30 06 | lda FP1 + 340 | 1 UniFP1.asm 321 | Code | 11 | | 2 | 00/0503 : 85 C5 | sta {$C5} + 341 | 1 UniFP1.asm 322 | Empty | 11 | | 0 | 00/0505 | + 342 | 1 UniFP1.asm 323 | Code | 11 | | 3 | 00/0505 : AD 31 06 | lda FP1+1 + 343 | 1 UniFP1.asm 324 | Code | 11 | | 2 | 00/0508 : 85 C6 | sta {$C6} + 344 | 1 UniFP1.asm 325 | Code | 11 | | 3 | 00/050A : AD 32 06 | lda FP1+2 + 345 | 1 UniFP1.asm 326 | Code | 11 | | 2 | 00/050D : 85 C7 | sta {$C6}+1 + 346 | 1 UniFP1.asm 327 | Code | 11 | | 3 | 00/050F : AD 33 06 | lda FP1+3 + 347 | 1 UniFP1.asm 328 | Code | 11 | | 2 | 00/0512 : 85 C8 | sta {$C6}+2 + 348 | 1 UniFP1.asm 329 | Empty | 11 | | 0 | 00/0514 | + 349 | 1 UniFP1.asm 330 | Comment | 11 | | 0 | 00/0514 | ** FP2 ** + 350 | 1 UniFP1.asm 331 | Code | 11 | | 3 | 00/0514 : AD 34 06 | lda FP2 + 351 | 1 UniFP1.asm 332 | Code | 11 | | 2 | 00/0517 : 85 C1 | sta {$C1} + 352 | 1 UniFP1.asm 333 | Empty | 11 | | 0 | 00/0519 | + 353 | 1 UniFP1.asm 334 | Code | 11 | | 3 | 00/0519 : AD 35 06 | lda FP2+1 + 354 | 1 UniFP1.asm 335 | Code | 11 | | 2 | 00/051C : 85 C2 | sta {$C2} + 355 | 1 UniFP1.asm 336 | Code | 11 | | 3 | 00/051E : AD 36 06 | lda FP2+2 + 356 | 1 UniFP1.asm 337 | Code | 11 | | 2 | 00/0521 : 85 C3 | sta {$C2}+1 + 357 | 1 UniFP1.asm 338 | Code | 11 | | 3 | 00/0523 : AD 37 06 | lda FP2+3 + 358 | 1 UniFP1.asm 339 | Code | 11 | | 2 | 00/0526 : 85 C4 | sta {$C2}+2 + 359 | 1 UniFP1.asm 340 | Empty | 11 | | 0 | 00/0528 | + 360 | 1 UniFP1.asm 341 | Comment | 11 | | 0 | 00/0528 | ************************** Target Function *********************** + 361 | 1 UniFP1.asm 342 | Comment | 11 | | 0 | 00/0528 | * Y=N*N * + 362 | 1 UniFP1.asm 343 | Comment | 11 | | 0 | 00/0528 | ****************************************************************** + 363 | 1 UniFP1.asm 344 | Comment | 11 | | 0 | 00/0528 | * + 364 | 1 UniFP1.asm 345 | Comment | 11 | | 0 | 00/0528 | ** Simple MUL y=x*x ** + 365 | 1 UniFP1.asm 346 | Code | 11 | | 3 | 00/0528 : 20 9F 05 | jsr FMUL ;FMUL ; Call FP routine + 366 | 1 UniFP1.asm 347 | Empty | 11 | | 0 | 00/052B | + 367 | 1 UniFP1.asm 348 | Code | 11 | | 3 | 00/052B : 20 12 06 | jsr FIX ;FIX Call FP to INT routine M1=HI-Byte M1+1=Low-Byte + 368 | 1 UniFP1.asm 349 | Empty | 11 | | 0 | 00/052E | + 369 | 1 UniFP1.asm 350 | Empty | 11 | | 0 | 00/052E | + 370 | 1 UniFP1.asm 351 | Comment | 11 | | 0 | 00/052E | *** Output Data result FP1 to Unidisk registers First Time first 3 Byte out *** + 371 | 1 UniFP1.asm 352 | Code | 11 | | 2 | 00/052E : A5 C5 | lda {$C5} + 372 | 1 UniFP1.asm 353 | Code | 11 | | 2 | 00/0530 : A6 C6 | ldx {$C6} + 373 | 1 UniFP1.asm 354 | Code | 11 | | 2 | 00/0532 : A4 C7 | ldy {$C6}+1 + 374 | 1 UniFP1.asm 355 | Empty | 11 | | 0 | 00/0534 | + 375 | 1 UniFP1.asm 356 | Code | 11 | | 1 | 00/0534 : 60 | rts + 376 | 1 UniFP1.asm 357 | Comment | 11 | | 0 | 00/0535 | *** Output Data result FP1 to Unidisk registers Second Time latest 1 Byte out *** + 377 | 1 UniFP1.asm 358 | Code | 11 | | 2 | 00/0535 : A5 C8 | SECOND lda {$C6}+2 ; Entry point by Program Counter set + 378 | 1 UniFP1.asm 359 | Empty | 11 | | 0 | 00/0537 | + 379 | 1 UniFP1.asm 360 | Code | 11 | | 1 | 00/0537 : 60 | rts + 380 | 1 UniFP1.asm 361 | Comment | 11 | | 0 | 00/0538 | *************************************************** + 381 | 1 UniFP1.asm 362 | Comment | 11 | | 0 | 00/0538 | * + 382 | 1 UniFP1.asm 363 | Comment | 11 | | 0 | 00/0538 | ***************** FP Routine ***************** + 383 | 1 UniFP1.asm 364 | Comment | 11 | | 0 | 00/0538 | * + 384 | 1 UniFP1.asm 365 | Comment | 11 | | 0 | 00/0538 | *********************** + 385 | 1 UniFP1.asm 366 | Comment | 11 | | 0 | 00/0538 | * * + 386 | 1 UniFP1.asm 367 | Comment | 11 | | 0 | 00/0538 | * APPLE-II FLOATING * + 387 | 1 UniFP1.asm 368 | Comment | 11 | | 0 | 00/0538 | * POINT ROUTINES * + 388 | 1 UniFP1.asm 369 | Comment | 11 | | 0 | 00/0538 | * * + 389 | 1 UniFP1.asm 370 | Comment | 11 | | 0 | 00/0538 | * COPYRIGHT 1977 BY * + 390 | 1 UniFP1.asm 371 | Comment | 11 | | 0 | 00/0538 | * APPLE COMPUTER INC. * + 391 | 1 UniFP1.asm 372 | Comment | 11 | | 0 | 00/0538 | * * + 392 | 1 UniFP1.asm 373 | Comment | 11 | | 0 | 00/0538 | * ALL RIGHTS RESERVED * + 393 | 1 UniFP1.asm 374 | Comment | 11 | | 0 | 00/0538 | * * + 394 | 1 UniFP1.asm 375 | Comment | 11 | | 0 | 00/0538 | * S. WOZNIAK * + 395 | 1 UniFP1.asm 376 | Comment | 11 | | 0 | 00/0538 | * * + 396 | 1 UniFP1.asm 377 | Comment | 11 | | 0 | 00/0538 | *********************** + 397 | 1 UniFP1.asm 378 | Comment | 11 | | 0 | 00/0538 | * TITLE "FLOATING POINT ROUTINES for Unidisk memory" + 398 | 1 UniFP1.asm 379 | Comment | 11 | | 0 | 00/0538 | * + 399 | 1 UniFP1.asm 380 | Empty | 11 | | 0 | 00/0538 | + 400 | 1 UniFP1.asm 381 | Code | 11 | | 1 | 00/0538 : 18 | ADD CLC ;CLEAR CARRY + 401 | 1 UniFP1.asm 382 | Code | 11 | | 2 | 00/0539 : A2 02 | LDX #$2 ;INDEX FOR 3-BYTE ADD. + 402 | 1 UniFP1.asm 383 | Code | 11 | | 2 | 00/053B : B5 C6 | ADD1 LDA {$C6},X + 403 | 1 UniFP1.asm 384 | Code | 11 | | 2 | 00/053D : 75 C2 | ADC {$C2},X ;ADD A BYTE OF MANT2 TO MANT1 + 404 | 1 UniFP1.asm 385 | Code | 11 | | 2 | 00/053F : 95 C6 | STA {$C6},X + 405 | 1 UniFP1.asm 386 | Code | 11 | | 1 | 00/0541 : CA | DEX ;INDEX TO NEXT MORE SIGNIF. BYTE. + 406 | 1 UniFP1.asm 387 | Code | 11 | | 2 | 00/0542 : 10 F7 | BPL ADD1 ;LOOP UNTIL DONE. + 407 | 1 UniFP1.asm 388 | Code | 11 | | 1 | 00/0544 : 60 | RTS ;RETURN + 408 | 1 UniFP1.asm 389 | Code | 11 | | 2 | 00/0545 : 06 C0 | MD1 ASL {$C0} ;CLEAR LSB OF SIGN. + 409 | 1 UniFP1.asm 390 | Code | 11 | | 3 | 00/0547 : 20 4A 05 | JSR ABSWAP ;ABS VAL OF M1, THEN SWAP WITH M2 + 410 | 1 UniFP1.asm 391 | Code | 11 | | 2 | 00/054A : 24 C6 | ABSWAP BIT {$C6} ;MANT1 NEGATIVE? + 411 | 1 UniFP1.asm 392 | Code | 11 | | 2 | 00/054C : 10 05 | BPL ABSWAP1 ;NO, SWAP WITH MANT2 AND RETURN. + 412 | 1 UniFP1.asm 393 | Code | 11 | | 3 | 00/054E : 20 B7 05 | JSR FCOMPL ;YES, COMPLEMENT IT. + 413 | 1 UniFP1.asm 394 | Code | 11 | | 2 | 00/0551 : E6 C0 | INC {$C0} ;INCR SIGN, COMPLEMENTING LSB. + 414 | 1 UniFP1.asm 395 | Code | 11 | | 1 | 00/0553 : 38 | ABSWAP1 SEC ;SET CARRY FOR RETURN TO MUL/DIV. + 415 | 1 UniFP1.asm 396 | Code | 11 | | 2 | 00/0554 : A2 04 | SWAP LDX #$4 ;INDEX FOR 4 BYTE SWAP. + 416 | 1 UniFP1.asm 397 | Code | 11 | | 2 | 00/0556 : 94 C8 | SWAP1 STY {$C9}-1,X + 417 | 1 UniFP1.asm 398 | Code | 11 | | 2 | 00/0558 : B5 C4 | LDA {$C5}-1,X ;SWAP A BYTE OF EXP/MANT1 WITH + 418 | 1 UniFP1.asm 399 | Code | 11 | | 2 | 00/055A : B4 C0 | LDY {$C1}-1,X ;EXP/MANT2 AND LEAVE A COPY OF + 419 | 1 UniFP1.asm 400 | Code | 11 | | 2 | 00/055C : 94 C4 | STY {$C5}-1,X ;MANT1 IN E (3 BYTES). E+3 USED + 420 | 1 UniFP1.asm 401 | Code | 11 | | 2 | 00/055E : 95 C0 | STA {$C1}-1,X + 421 | 1 UniFP1.asm 402 | Code | 11 | | 1 | 00/0560 : CA | DEX ;ADVANCE INDEX TO NEXT BYTE + 422 | 1 UniFP1.asm 403 | Code | 11 | | 2 | 00/0561 : D0 F3 | BNE SWAP1 ;LOOP UNTIL DONE. + 423 | 1 UniFP1.asm 404 | Code | 11 | | 1 | 00/0563 : 60 | RTS ;RETURN + 424 | 1 UniFP1.asm 405 | Code | 11 | | 2 | 00/0564 : A9 8E | FLOAT LDA #$8E ;INIT EXP1 TO 14, <--------------- int to fp + 425 | 1 UniFP1.asm 406 | Code | 11 | | 2 | 00/0566 : 85 C5 | STA {$C5} ;THEN NORMALIZE TO FLOAT. + 426 | 1 UniFP1.asm 407 | Code | 11 | | 2 | 00/0568 : A5 C6 | NORM1 LDA {$C6} ;HIGH-ORDER MANT1 BYTE. + 427 | 1 UniFP1.asm 408 | Code | 11 | | 2 | 00/056A : C9 C0 | CMP #$C0 ;UPPER TWO BITS UNEQUAL? + 428 | 1 UniFP1.asm 409 | Code | 11 | | 2 | 00/056C : 30 0C | BMI RTS1 ;YES, RETURN WITH MANT1 NORMALIZED + 429 | 1 UniFP1.asm 410 | Code | 11 | | 2 | 00/056E : C6 C5 | DEC {$C5} ;DECREMENT EXP1. + 430 | 1 UniFP1.asm 411 | Code | 11 | | 2 | 00/0570 : 06 C8 | ASL {$C6}+2 + 431 | 1 UniFP1.asm 412 | Code | 11 | | 2 | 00/0572 : 26 C7 | ROL {$C6}+1 ;SHIFT MANT1 (3 BYTES) LEFT. + 432 | 1 UniFP1.asm 413 | Code | 11 | | 2 | 00/0574 : 26 C6 | ROL {$C6} + 433 | 1 UniFP1.asm 414 | Code | 11 | | 2 | 00/0576 : A5 C5 | NORM LDA {$C5} ;EXP1 ZERO? + 434 | 1 UniFP1.asm 415 | Code | 11 | | 2 | 00/0578 : D0 EE | BNE NORM1 ;NO, CONTINUE NORMALIZING. + 435 | 1 UniFP1.asm 416 | Code | 11 | | 1 | 00/057A : 60 | RTS1 RTS ;RETURN. + 436 | 1 UniFP1.asm 417 | Code | 11 | | 3 | 00/057B : 20 B7 05 | FSUB JSR FCOMPL ;CMPL MANT1,CLEARS CARRY UNLESS 0 <---- sub + 437 | 1 UniFP1.asm 418 | Code | 11 | | 3 | 00/057E : 20 8E 05 | SWPALGN JSR ALGNSWP ;RIGHT SHIFT MANT1 OR SWAP WITH + 438 | 1 UniFP1.asm 419 | Code | 11 | | 2 | 00/0581 : A5 C1 | FADD LDA {$C1} ;<------------------------------------- add + 439 | 1 UniFP1.asm 420 | Code | 11 | | 2 | 00/0583 : C5 C5 | CMP {$C5} ;COMPARE EXP1 WITH EXP2. + 440 | 1 UniFP1.asm 421 | Code | 11 | | 2 | 00/0585 : D0 F7 | BNE SWPALGN ;IF #,SWAP ADDENDS OR ALIGN MANTS. + 441 | 1 UniFP1.asm 422 | Code | 11 | | 3 | 00/0587 : 20 38 05 | JSR ADD ;ADD ALIGNED MANTISSAS. + 442 | 1 UniFP1.asm 423 | Code | 11 | | 2 | 00/058A : 50 EA | ADDEND BVC NORM ;NO OVERFLOW, NORMALIZE RESULT. + 443 | 1 UniFP1.asm 424 | Code | 11 | | 2 | 00/058C : 70 05 | BVS RTLOG ;OV: SHIFT M1 RIGHT, CARRY INTO SIGN + 444 | 1 UniFP1.asm 425 | Code | 11 | | 2 | 00/058E : 90 C4 | ALGNSWP BCC SWAP ;SWAP IF CARRY CLEAR, + 445 | 1 UniFP1.asm 426 | Comment | 11 | | 0 | 00/0590 | * ELSE SHIFT RIGHT ARITH. + 446 | 1 UniFP1.asm 427 | Code | 11 | | 2 | 00/0590 : A5 C6 | RTAR LDA {$C6} ;SIGN OF MANT1 INTO CARRY FOR + 447 | 1 UniFP1.asm 428 | Code | 11 | | 1 | 00/0592 : 0A | ASL ;RIGHT ARITH SHIFT. + 448 | 1 UniFP1.asm 429 | Code | 11 | | 2 | 00/0593 : E6 C5 | RTLOG INC {$C5} ;INCR X1 TO ADJUST FOR RIGHT SHIFT + 449 | 1 UniFP1.asm 430 | Code | 11 | | 2 | 00/0595 : F0 75 | BEQ OVFL ;EXP1 OUT OF RANGE. + 450 | 1 UniFP1.asm 431 | Code | 11 | | 2 | 00/0597 : A2 FA | RTLOG1 LDX #$FA ;INDEX FOR 6:BYTE RIGHT SHIFT. + 451 | 1 UniFP1.asm 432 | Code | 11 | | 2 | 00/0599 : 76 CC | ROR1 ROR {$C9}+3,X + 452 | 1 UniFP1.asm 433 | Code | 11 | | 1 | 00/059B : E8 | INX ;NEXT BYTE OF SHIFT. + 453 | 1 UniFP1.asm 434 | Code | 11 | | 2 | 00/059C : D0 FB | BNE ROR1 ;LOOP UNTIL DONE. + 454 | 1 UniFP1.asm 435 | Code | 11 | | 1 | 00/059E : 60 | RTS ;RETURN. + 455 | 1 UniFP1.asm 436 | Code | 11 | | 3 | 00/059F : 20 45 05 | FMUL JSR MD1 ;ABS VAL OF MANT1, MANT2 <-------------- mul + 456 | 1 UniFP1.asm 437 | Code | 11 | | 2 | 00/05A2 : 65 C5 | ADC {$C5} ;ADD EXP1 TO EXP2 FOR PRODUCT EXP + 457 | 1 UniFP1.asm 438 | Code | 11 | | 3 | 00/05A4 : 20 F5 05 | JSR MD2 ;CHECK PROD. EXP AND PREP. FOR MUL + 458 | 1 UniFP1.asm 439 | Code | 11 | | 1 | 00/05A7 : 18 | CLC ;CLEAR CARRY FOR FIRST BIT. + 459 | 1 UniFP1.asm 440 | Code | 11 | | 3 | 00/05A8 : 20 97 05 | MUL1 JSR RTLOG1 ;M1 AND E RIGHT (PROD AND MPLIER) + 460 | 1 UniFP1.asm 441 | Code | 11 | | 2 | 00/05AB : 90 03 | BCC MUL2 ;IF CARRY CLEAR, SKIP PARTIAL PROD + 461 | 1 UniFP1.asm 442 | Code | 11 | | 3 | 00/05AD : 20 38 05 | JSR ADD ;ADD MULTIPLICAND TO PRODUCT. + 462 | 1 UniFP1.asm 443 | Code | 11 | | 1 | 00/05B0 : 88 | MUL2 DEY ;NEXT MUL ITERATION. + 463 | 1 UniFP1.asm 444 | Code | 11 | | 2 | 00/05B1 : 10 F5 | BPL MUL1 ;LOOP UNTIL DONE. + 464 | 1 UniFP1.asm 445 | Code | 11 | | 2 | 00/05B3 : 46 C0 | MDEND LSR {$C0} ;TEST SIGN LSB. + 465 | 1 UniFP1.asm 446 | Code | 11 | | 2 | 00/05B5 : 90 BF | NORMX BCC NORM ;IF EVEN,NORMALIZE PROD,ELSE COMP + 466 | 1 UniFP1.asm 447 | Code | 11 | | 1 | 00/05B7 : 38 | FCOMPL SEC ;SET CARRY FOR SUBTRACT. <--------------- not + 467 | 1 UniFP1.asm 448 | Code | 11 | | 2 | 00/05B8 : A2 03 | LDX #$3 ;INDEX FOR 3 BYTE SUBTRACT. + 468 | 1 UniFP1.asm 449 | Code | 11 | | 2 | 00/05BA : A9 00 | COMPL1 LDA #$0 ;CLEAR A. + 469 | 1 UniFP1.asm 450 | Code | 11 | | 2 | 00/05BC : F5 C5 | SBC {$C5},X ;SUBTRACT BYTE OF EXP1. + 470 | 1 UniFP1.asm 451 | Code | 11 | | 2 | 00/05BE : 95 C5 | STA {$C5},X ;RESTORE IT. + 471 | 1 UniFP1.asm 452 | Code | 11 | | 1 | 00/05C0 : CA | DEX ;NEXT MORE SIGNIFICANT BYTE. + 472 | 1 UniFP1.asm 453 | Code | 11 | | 2 | 00/05C1 : D0 F7 | BNE COMPL1 ;LOOP UNTIL DONE. + 473 | 1 UniFP1.asm 454 | Code | 11 | | 2 | 00/05C3 : F0 C5 | BEQ ADDEND ;NORMALIZE (OR SHIFT RT IF OVFL). + 474 | 1 UniFP1.asm 455 | Code | 11 | | 3 | 00/05C5 : 20 45 05 | FDIV JSR MD1 ;TAKE ABS VAL OF MANT1, MANT2. <--------- div + 475 | 1 UniFP1.asm 456 | Code | 11 | | 2 | 00/05C8 : E5 C5 | SBC {$C5} ;SUBTRACT EXP1 FROM EXP2. + 476 | 1 UniFP1.asm 457 | Code | 11 | | 3 | 00/05CA : 20 F5 05 | JSR MD2 ;SAVE AS QUOTIENT EXP. + 477 | 1 UniFP1.asm 458 | Code | 11 | | 1 | 00/05CD : 38 | DIV1 SEC ;SET CARRY FOR SUBTRACT. + 478 | 1 UniFP1.asm 459 | Code | 11 | | 2 | 00/05CE : A2 02 | LDX #$2 ;INDEX FOR 3-BYTE SUBTRACTION. + 479 | 1 UniFP1.asm 460 | Code | 11 | | 2 | 00/05D0 : B5 C2 | DIV2 LDA {$C2},X + 480 | 1 UniFP1.asm 461 | Code | 11 | | 2 | 00/05D2 : F5 C9 | SBC {$C9},X ;SUBTRACT A BYTE OF E FROM MANT2. + 481 | 1 UniFP1.asm 462 | Code | 11 | | 1 | 00/05D4 : 48 | PHA ;SAVE ON STACK. + 482 | 1 UniFP1.asm 463 | Code | 11 | | 1 | 00/05D5 : CA | DEX ;NEXT MORE SIGNIFICANT BYTE. + 483 | 1 UniFP1.asm 464 | Code | 11 | | 2 | 00/05D6 : 10 F8 | BPL DIV2 ;LOOP UNTIL DONE. + 484 | 1 UniFP1.asm 465 | Code | 11 | | 2 | 00/05D8 : A2 FD | LDX #$FD ;INDEX FOR 3-BYTE CONDITIONAL MOVE + 485 | 1 UniFP1.asm 466 | Code | 11 | | 1 | 00/05DA : 68 | DIV3 PLA ;PULL BYTE OF DIFFERENCE OFF STACK + 486 | 1 UniFP1.asm 467 | Code | 11 | | 2 | 00/05DB : 90 02 | BCC DIV4 ;IF M2EGVR2}|GfK1o>mw)bhm(s#Yj5|+O2eVza^^F+c*hTa=s z=2;NQuq|Q3+_n1?T4mQBNNANyxVMOX +* +* The target of this project is to use the Unidisk 3.5 drive to perform +* specific numerical routines (integers and floating point numbers) +* calculation in order to use it as a Apple II co-processor unit. +* +* Copyright (C) 2015 Riccardo Greco . +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* +* @com.wudsn.ide.asm.hardware=APPLE2 + XC +** CHKSUM Pointer * +PTR equ $08 +** Protocol Converter Call +ZPTempL equ $0006 ;Temporary zero page storage +ZPTempH equ $0007 +** Zero page storage ** +N1 equ $FA ;25 4 Byte FP FA--FD (FP1) +N2 equ $EC ;27 4 Byte FP EC--EF (FP2) +RSLT equ $1D ; $7000 ;29 +*** Monitor routines *** +COut equ $FDED ;Console output ASCII +CROut equ $FD8E ;Carriage return +** Command Code ** +StatusCmd equ 0 +** Status Code ** +StatusUNI equ 5 +* +ControlCmd equ 4 +** Control Codes ** +Run equ 5 +SetDWLoad equ 6 +DWLoad equ 7 +* + org $6000 +***************************************************** +************** CHKSUM MAIN Routine ****************** +* +;STARTCHK lda #STARTCHK +; sta PTR+1 +; ldy #$00 +; lda #$00 +; pha +;LOOP pla +; eor (PTR),y +; pha +; inc PTR +; bne CHK +; inc PTR+1 +;CHK lda PTR+1 +; cmp #>PROGEND +; bcc LOOP +; lda PTR +; cmp # + 3 | 1 UniFP2.asm 3 | Comment | 11 | | 0 | 00/8000 | * + 4 | 1 UniFP2.asm 4 | Comment | 11 | | 0 | 00/8000 | * The target of this project is to use the Unidisk 3.5 drive to perform + 5 | 1 UniFP2.asm 5 | Comment | 11 | | 0 | 00/8000 | * specific numerical routines (integers and floating point numbers) + 6 | 1 UniFP2.asm 6 | Comment | 11 | | 0 | 00/8000 | * calculation in order to use it as a Apple II co-processor unit. + 7 | 1 UniFP2.asm 7 | Comment | 11 | | 0 | 00/8000 | * + 8 | 1 UniFP2.asm 8 | Comment | 11 | | 0 | 00/8000 | * Copyright (C) 2015 Riccardo Greco . + 9 | 1 UniFP2.asm 9 | Comment | 11 | | 0 | 00/8000 | * + 10 | 1 UniFP2.asm 10 | Comment | 11 | | 0 | 00/8000 | * This program is free software: you can redistribute it and/or modify + 11 | 1 UniFP2.asm 11 | Comment | 11 | | 0 | 00/8000 | * it under the terms of the GNU General Public License as published by + 12 | 1 UniFP2.asm 12 | Comment | 11 | | 0 | 00/8000 | * the Free Software Foundation, either version 3 of the License, or + 13 | 1 UniFP2.asm 13 | Comment | 11 | | 0 | 00/8000 | * (at your option) any later version. + 14 | 1 UniFP2.asm 14 | Comment | 11 | | 0 | 00/8000 | * This program is distributed in the hope that it will be useful, + 15 | 1 UniFP2.asm 15 | Comment | 11 | | 0 | 00/8000 | * but WITHOUT ANY WARRANTY; without even the implied warranty of + 16 | 1 UniFP2.asm 16 | Comment | 11 | | 0 | 00/8000 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 17 | 1 UniFP2.asm 17 | Comment | 11 | | 0 | 00/8000 | * GNU General Public License for more details. + 18 | 1 UniFP2.asm 18 | Comment | 11 | | 0 | 00/8000 | * You should have received a copy of the GNU General Public License + 19 | 1 UniFP2.asm 19 | Comment | 11 | | 0 | 00/8000 | * along with this program. If not, see . + 20 | 1 UniFP2.asm 20 | Comment | 11 | | 0 | 00/8000 | * + 21 | 1 UniFP2.asm 21 | Comment | 11 | | 0 | 00/8000 | * + 22 | 1 UniFP2.asm 22 | Comment | 11 | | 0 | 00/8000 | * @com.wudsn.ide.asm.hardware=APPLE2 + 23 | 1 UniFP2.asm 23 | Directive | 11 | | 0 | 00/8000 | XC + 24 | 1 UniFP2.asm 24 | Comment | 11 | | 0 | 00/8000 | ** CHKSUM Pointer * + 25 | 1 UniFP2.asm 25 | Equivalence | 11 | | 0 | 00/8000 | PTR equ $08 + 26 | 1 UniFP2.asm 26 | Comment | 11 | | 0 | 00/8000 | ** Protocol Converter Call + 27 | 1 UniFP2.asm 27 | Equivalence | 11 | | 0 | 00/8000 | ZPTempL equ $0006 ;Temporary zero page storage + 28 | 1 UniFP2.asm 28 | Equivalence | 11 | | 0 | 00/8000 | ZPTempH equ $0007 + 29 | 1 UniFP2.asm 29 | Comment | 11 | | 0 | 00/8000 | ** Zero page storage ** + 30 | 1 UniFP2.asm 30 | Equivalence | 11 | | 0 | 00/8000 | N1 equ $FA ;25 4 Byte FP FA--FD (FP1) + 31 | 1 UniFP2.asm 31 | Equivalence | 11 | | 0 | 00/8000 | N2 equ $EC ;27 4 Byte FP EC--EF (FP2) + 32 | 1 UniFP2.asm 32 | Equivalence | 11 | | 0 | 00/8000 | RSLT equ $1D ; $7000 ;29 + 33 | 1 UniFP2.asm 33 | Comment | 11 | | 0 | 00/8000 | *** Monitor routines *** + 34 | 1 UniFP2.asm 34 | Equivalence | 11 | | 0 | 00/8000 | COut equ $FDED ;Console output ASCII + 35 | 1 UniFP2.asm 35 | Equivalence | 11 | | 0 | 00/8000 | CROut equ $FD8E ;Carriage return + 36 | 1 UniFP2.asm 36 | Comment | 11 | | 0 | 00/8000 | ** Command Code ** + 37 | 1 UniFP2.asm 37 | Equivalence | 11 | | 0 | 00/8000 | StatusCmd equ 0 + 38 | 1 UniFP2.asm 38 | Comment | 11 | | 0 | 00/8000 | ** Status Code ** + 39 | 1 UniFP2.asm 39 | Equivalence | 11 | | 0 | 00/8000 | StatusUNI equ 5 + 40 | 1 UniFP2.asm 40 | Comment | 11 | | 0 | 00/8000 | * + 41 | 1 UniFP2.asm 41 | Equivalence | 11 | | 0 | 00/8000 | ControlCmd equ 4 + 42 | 1 UniFP2.asm 42 | Comment | 11 | | 0 | 00/8000 | ** Control Codes ** + 43 | 1 UniFP2.asm 43 | Equivalence | 11 | | 0 | 00/8000 | Run equ 5 + 44 | 1 UniFP2.asm 44 | Equivalence | 11 | | 0 | 00/8000 | SetDWLoad equ 6 + 45 | 1 UniFP2.asm 45 | Equivalence | 11 | | 0 | 00/8000 | DWLoad equ 7 + 46 | 1 UniFP2.asm 46 | Comment | 11 | | 0 | 00/8000 | * + 47 | 1 UniFP2.asm 47 | Directive | 11 | | 0 | 00/8000 | org $6000 + 48 | 1 UniFP2.asm 48 | Comment | 11 | | 0 | 00/6000 | ***************************************************** + 49 | 1 UniFP2.asm 49 | Comment | 11 | | 0 | 00/6000 | ************** CHKSUM MAIN Routine ****************** + 50 | 1 UniFP2.asm 50 | Comment | 11 | | 0 | 00/6000 | * + 51 | 1 UniFP2.asm 51 | Comment | 11 | | 0 | 00/6000 | ;STARTCHK lda #STARTCHK + 54 | 1 UniFP2.asm 54 | Comment | 11 | | 0 | 00/6000 | ; sta PTR+1 + 55 | 1 UniFP2.asm 55 | Comment | 11 | | 0 | 00/6000 | ; ldy #$00 + 56 | 1 UniFP2.asm 56 | Comment | 11 | | 0 | 00/6000 | ; lda #$00 + 57 | 1 UniFP2.asm 57 | Comment | 11 | | 0 | 00/6000 | ; pha + 58 | 1 UniFP2.asm 58 | Comment | 11 | | 0 | 00/6000 | ;LOOP pla + 59 | 1 UniFP2.asm 59 | Comment | 11 | | 0 | 00/6000 | ; eor (PTR),y + 60 | 1 UniFP2.asm 60 | Comment | 11 | | 0 | 00/6000 | ; pha + 61 | 1 UniFP2.asm 61 | Comment | 11 | | 0 | 00/6000 | ; inc PTR + 62 | 1 UniFP2.asm 62 | Comment | 11 | | 0 | 00/6000 | ; bne CHK + 63 | 1 UniFP2.asm 63 | Comment | 11 | | 0 | 00/6000 | ; inc PTR+1 + 64 | 1 UniFP2.asm 64 | Comment | 11 | | 0 | 00/6000 | ;CHK lda PTR+1 + 65 | 1 UniFP2.asm 65 | Comment | 11 | | 0 | 00/6000 | ; cmp #>PROGEND + 66 | 1 UniFP2.asm 66 | Comment | 11 | | 0 | 00/6000 | ; bcc LOOP + 67 | 1 UniFP2.asm 67 | Comment | 11 | | 0 | 00/6000 | ; lda PTR + 68 | 1 UniFP2.asm 68 | Comment | 11 | | 0 | 00/6000 | ; cmp #HMtLKdtYU zF34*A+xmX#!mQSR32PY&q*~{$Wh^k@kpPlfoDHq>e3Bc0OpBL{p8vI4=d~_c%T%D% cI)5!QkX*3zpH}Na1)!ae@2^tOex2YA05WPmjQ{`u literal 0 HcmV?d00001 diff --git a/AppleII/FP f(x)/FPConv.asm b/AppleII/FP f(x)/FPConv.asm new file mode 100644 index 0000000..b957878 --- /dev/null +++ b/AppleII/FP f(x)/FPConv.asm @@ -0,0 +1,143 @@ +* @com.wudsn.ide.asm.hardware=APPLE2 +************************************ +* BASIC TO FAC TO FP1 * +* X=NUMBER * +* CALL 32768,X 768,X * +************************************ + org $8000 + +CHKCOM equ $DEBE +FRMNUM equ $DD67 +PTRGET equ $DFE3 +MOVMF equ $EB2B +MOVFM equ $EAF9 + +** Woz FP Accumulator 4 Byte + 1 Byte Extra + 1 Byte SIGN** +FP1 equ $FA ;Translate F8 --> FA +E equ $FE ;Translate FC --> FE +SIGN equ $EB + +FP2 equ $EC + +** Applesoft FP Accumulator 5 Byte + 1 Byte Sign ** +FAC equ $9D + +RSLT equ $7000 + + *************************** + +ENTRY1 jsr CHKCOM + jsr FRMNUM ;VARIABLE X ->FAC (6 Byte Unpacked) + +** FPC to FP1 conversion ** + + lda FAC + dec A ; dec the EXP + sta FP1 + sta FP2 ; Copy + + lda FAC+5 + bmi NEG ; chk the Hi bit of 1 byte Mantissa + +POS clc ; Hi bit 0 for negative + lda FAC+5 + + ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + ror ; Didide for 2^1 + + sta FP1+1 + sta FP2+1 ; Copy + + jmp CONT + +NEG clc ; Hi bit 1 for positive + lda FAC+5 + + ror ; Didide for 2^1 + + eor #$FF ; One's complement, NOT + clc + adc #01 ; Two's complement, +1 + + sta FP1+1 + sta FP2+1 ; Copy + +CONT lda FAC+2 + ror + sta FP1+2 + sta FP2+2 ; Copy + + lda FAC+3 + ror + sta FP1+3 + sta FP2+3 ; Copy FP2=FP1 X2=X1 + + lda FAC+4 + ror + sta E + + ;brk + rts + +************************************ +* FP1 TO FAC TO BASIC * +* CALL 32831,Y 831,Y * +* PRINT Y * +************************************ + +* +** FP1 to FAC conversion ** +* +ENTRY2 lda RSLT ; X1 1 Byte --> 9D FAC + inc A ; 2^(FP1+1) inc EXP + sta FAC + + lda RSLT+1 + bmi NEG2 ; chk the Hi bit of 1 byte Mantissa + + +POS2 clc + lda RSLT+1 ; M1 Hi 2 Byte --> 9E FAC + rol ; Multiply for 2^1 + + ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + sta FAC+1 ; To 6^ Byte of FAC Unpacked + + ;sta FAC+5 ; To 1^ Byte Mantissa of FAC UnPacked + jmp CONT2 + +NEG2 lda RSLT+1 + + sec + sbc #01 ; One's complement inv -1 + eor #$FF ; Two's complement inv NOT + + rol ; Multiply for 2^1 + + sta FAC+1 ; To 1^ Byte Mantissa of FAC Packed + sta FAC+5 ; To 6^ Byte of FAC Unpacked + + +CONT2 lda RSLT+2 ; M1 3 Byte --> 9F FAC + rol + sta FAC+2 + + lda RSLT+3 ; M1 Lo 4 Byte --> A0 FAC + rol + sta FAC+3 + + lda E ; Extra 5 Byte --> A1 FAC + rol + sta FAC+4 + + ;brk + *************************** +* + jsr CHKCOM + jsr PTRGET ; Return the Y and A pointing to the specific variabile + tax + jsr MOVMF ;FAC->VARIABLE Y (5 Bytes Packed) + + ;brk + rts + chk \ No newline at end of file diff --git a/AppleII/FP f(x)/FPConv_Output.txt b/AppleII/FP f(x)/FPConv_Output.txt new file mode 100644 index 0000000..98e065b --- /dev/null +++ b/AppleII/FP f(x)/FPConv_Output.txt @@ -0,0 +1,147 @@ +------+----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code +------+----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + 1 | 1 FPConv.asm 1 | Comment | 11 | | 0 | 00/8000 | * @com.wudsn.ide.asm.hardware=APPLE2 + 2 | 1 FPConv.asm 2 | Comment | 11 | | 0 | 00/8000 | ************************************ + 3 | 1 FPConv.asm 3 | Comment | 11 | | 0 | 00/8000 | * BASIC TO FAC TO FP1 * + 4 | 1 FPConv.asm 4 | Comment | 11 | | 0 | 00/8000 | * X=NUMBER * + 5 | 1 FPConv.asm 5 | Comment | 11 | | 0 | 00/8000 | * CALL 32768,X 768,X * + 6 | 1 FPConv.asm 6 | Comment | 11 | | 0 | 00/8000 | ************************************ + 7 | 1 FPConv.asm 7 | Directive | 11 | | 0 | 00/8000 | org $8000 + 8 | 1 FPConv.asm 8 | Empty | 11 | | 0 | 00/8000 | + 9 | 1 FPConv.asm 9 | Equivalence | 11 | | 0 | 00/8000 | CHKCOM equ $DEBE + 10 | 1 FPConv.asm 10 | Equivalence | 11 | | 0 | 00/8000 | FRMNUM equ $DD67 + 11 | 1 FPConv.asm 11 | Equivalence | 11 | | 0 | 00/8000 | PTRGET equ $DFE3 + 12 | 1 FPConv.asm 12 | Equivalence | 11 | | 0 | 00/8000 | MOVMF equ $EB2B + 13 | 1 FPConv.asm 13 | Equivalence | 11 | | 0 | 00/8000 | MOVFM equ $EAF9 + 14 | 1 FPConv.asm 14 | Empty | 11 | | 0 | 00/8000 | + 15 | 1 FPConv.asm 15 | Comment | 11 | | 0 | 00/8000 | ** Woz FP Accumulator 4 Byte + 1 Byte Extra + 1 Byte SIGN** + 16 | 1 FPConv.asm 16 | Equivalence | 11 | | 0 | 00/8000 | FP1 equ $FA ;Translate F8 --> FA + 17 | 1 FPConv.asm 17 | Equivalence | 11 | | 0 | 00/8000 | E equ $FE ;Translate FC --> FE + 18 | 1 FPConv.asm 18 | Equivalence | 11 | | 0 | 00/8000 | SIGN equ $EB + 19 | 1 FPConv.asm 19 | Empty | 11 | | 0 | 00/8000 | + 20 | 1 FPConv.asm 20 | Equivalence | 11 | | 0 | 00/8000 | FP2 equ $EC + 21 | 1 FPConv.asm 21 | Empty | 11 | | 0 | 00/8000 | + 22 | 1 FPConv.asm 22 | Comment | 11 | | 0 | 00/8000 | ** Applesoft FP Accumulator 5 Byte + 1 Byte Sign ** + 23 | 1 FPConv.asm 23 | Equivalence | 11 | | 0 | 00/8000 | FAC equ $9D + 24 | 1 FPConv.asm 24 | Empty | 11 | | 0 | 00/8000 | + 25 | 1 FPConv.asm 25 | Equivalence | 11 | | 0 | 00/8000 | RSLT equ $7000 + 26 | 1 FPConv.asm 26 | Empty | 11 | | 0 | 00/8000 | + 27 | 1 FPConv.asm 27 | Comment | 11 | | 0 | 00/8000 | *************************** + 28 | 1 FPConv.asm 28 | Empty | 11 | | 0 | 00/8000 | + 29 | 1 FPConv.asm 29 | Code | 11 | | 3 | 00/8000 : 20 BE DE | ENTRY1 jsr {$DEBE} + 30 | 1 FPConv.asm 30 | Code | 11 | | 3 | 00/8003 : 20 67 DD | jsr {$DD67} ;VARIABLE X ->FAC (6 Byte Unpacked) + 31 | 1 FPConv.asm 31 | Empty | 11 | | 0 | 00/8006 | + 32 | 1 FPConv.asm 32 | Comment | 11 | | 0 | 00/8006 | ** FPC to FP1 conversion ** + 33 | 1 FPConv.asm 33 | Empty | 11 | | 0 | 00/8006 | + 34 | 1 FPConv.asm 34 | Code | 11 | | 2 | 00/8006 : A5 9D | lda {$9D} + 35 | 1 FPConv.asm 35 | Code | 11 | | 1 | 00/8008 : 3A | dec A ; dec the EXP + 36 | 1 FPConv.asm 36 | Code | 11 | | 2 | 00/8009 : 85 FA | sta {$FA} + 37 | 1 FPConv.asm 37 | Code | 11 | | 2 | 00/800B : 85 EC | sta {$EC} ; Copy + 38 | 1 FPConv.asm 38 | Empty | 11 | | 0 | 00/800D | + 39 | 1 FPConv.asm 39 | Code | 11 | | 2 | 00/800D : A5 A2 | lda {$9D}+5 + 40 | 1 FPConv.asm 40 | Code | 11 | | 2 | 00/800F : 30 0D | bmi NEG ; chk the Hi bit of 1 byte Mantissa + 41 | 1 FPConv.asm 41 | Empty | 11 | | 0 | 00/8011 | + 42 | 1 FPConv.asm 42 | Code | 11 | | 1 | 00/8011 : 18 | POS clc ; Hi bit 0 for negative + 43 | 1 FPConv.asm 43 | Code | 11 | | 2 | 00/8012 : A5 A2 | lda {$9D}+5 + 44 | 1 FPConv.asm 44 | Empty | 11 | | 0 | 00/8014 | + 45 | 1 FPConv.asm 45 | Code | 11 | | 2 | 00/8014 : 09 80 | ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + 46 | 1 FPConv.asm 46 | Code | 11 | | 1 | 00/8016 : 6A | ror ; Didide for 2^1 + 47 | 1 FPConv.asm 47 | Empty | 11 | | 0 | 00/8017 | + 48 | 1 FPConv.asm 48 | Code | 11 | | 2 | 00/8017 : 85 FB | sta {$FA}+1 + 49 | 1 FPConv.asm 49 | Code | 11 | | 2 | 00/8019 : 85 ED | sta {$EC}+1 ; Copy + 50 | 1 FPConv.asm 50 | Empty | 11 | | 0 | 00/801B | + 51 | 1 FPConv.asm 51 | Code | 11 | | 3 | 00/801B : 4C 2B 80 | jmp CONT + 52 | 1 FPConv.asm 52 | Empty | 11 | | 0 | 00/801E | + 53 | 1 FPConv.asm 53 | Code | 11 | | 1 | 00/801E : 18 | NEG clc ; Hi bit 1 for positive + 54 | 1 FPConv.asm 54 | Code | 11 | | 2 | 00/801F : A5 A2 | lda {$9D}+5 + 55 | 1 FPConv.asm 55 | Empty | 11 | | 0 | 00/8021 | + 56 | 1 FPConv.asm 56 | Code | 11 | | 1 | 00/8021 : 6A | ror ; Didide for 2^1 + 57 | 1 FPConv.asm 57 | Empty | 11 | | 0 | 00/8022 | + 58 | 1 FPConv.asm 58 | Code | 11 | | 2 | 00/8022 : 49 FF | eor #$FF ; One's complement, NOT + 59 | 1 FPConv.asm 59 | Code | 11 | | 1 | 00/8024 : 18 | clc + 60 | 1 FPConv.asm 60 | Code | 11 | | 2 | 00/8025 : 69 01 | adc #01 ; Two's complement, +1 + 61 | 1 FPConv.asm 61 | Empty | 11 | | 0 | 00/8027 | + 62 | 1 FPConv.asm 62 | Code | 11 | | 2 | 00/8027 : 85 FB | sta {$FA}+1 + 63 | 1 FPConv.asm 63 | Code | 11 | | 2 | 00/8029 : 85 ED | sta {$EC}+1 ; Copy + 64 | 1 FPConv.asm 64 | Empty | 11 | | 0 | 00/802B | + 65 | 1 FPConv.asm 65 | Code | 11 | | 2 | 00/802B : A5 9F | CONT lda {$9D}+2 + 66 | 1 FPConv.asm 66 | Code | 11 | | 1 | 00/802D : 6A | ror + 67 | 1 FPConv.asm 67 | Code | 11 | | 2 | 00/802E : 85 FC | sta {$FA}+2 + 68 | 1 FPConv.asm 68 | Code | 11 | | 2 | 00/8030 : 85 EE | sta {$EC}+2 ; Copy + 69 | 1 FPConv.asm 69 | Empty | 11 | | 0 | 00/8032 | + 70 | 1 FPConv.asm 70 | Code | 11 | | 2 | 00/8032 : A5 A0 | lda {$9D}+3 + 71 | 1 FPConv.asm 71 | Code | 11 | | 1 | 00/8034 : 6A | ror + 72 | 1 FPConv.asm 72 | Code | 11 | | 2 | 00/8035 : 85 FD | sta {$FA}+3 + 73 | 1 FPConv.asm 73 | Code | 11 | | 2 | 00/8037 : 85 EF | sta {$EC}+3 ; Copy FP2=FP1 X2=X1 + 74 | 1 FPConv.asm 74 | Empty | 11 | | 0 | 00/8039 | + 75 | 1 FPConv.asm 75 | Code | 11 | | 2 | 00/8039 : A5 A1 | lda {$9D}+4 + 76 | 1 FPConv.asm 76 | Code | 11 | | 1 | 00/803B : 6A | ror + 77 | 1 FPConv.asm 77 | Code | 11 | | 2 | 00/803C : 85 FE | sta {$FE} + 78 | 1 FPConv.asm 78 | Empty | 11 | | 0 | 00/803E | + 79 | 1 FPConv.asm 79 | Comment | 11 | | 0 | 00/803E | ;brk + 80 | 1 FPConv.asm 80 | Code | 11 | | 1 | 00/803E : 60 | rts + 81 | 1 FPConv.asm 81 | Empty | 11 | | 0 | 00/803F | + 82 | 1 FPConv.asm 82 | Comment | 11 | | 0 | 00/803F | ************************************ + 83 | 1 FPConv.asm 83 | Comment | 11 | | 0 | 00/803F | * FP1 TO FAC TO BASIC * + 84 | 1 FPConv.asm 84 | Comment | 11 | | 0 | 00/803F | * CALL 32831,Y 831,Y * + 85 | 1 FPConv.asm 85 | Comment | 11 | | 0 | 00/803F | * PRINT Y * + 86 | 1 FPConv.asm 86 | Comment | 11 | | 0 | 00/803F | ************************************ + 87 | 1 FPConv.asm 87 | Empty | 11 | | 0 | 00/803F | + 88 | 1 FPConv.asm 88 | Comment | 11 | | 0 | 00/803F | * + 89 | 1 FPConv.asm 89 | Comment | 11 | | 0 | 00/803F | ** FP1 to FAC conversion ** + 90 | 1 FPConv.asm 90 | Comment | 11 | | 0 | 00/803F | * + 91 | 1 FPConv.asm 91 | Code | 11 | | 3 | 00/803F : AD 00 70 | ENTRY2 lda {$7000} ; X1 1 Byte --> 9D FAC + 92 | 1 FPConv.asm 92 | Code | 11 | | 1 | 00/8042 : 1A | inc A ; 2^(FP1+1) inc EXP + 93 | 1 FPConv.asm 93 | Code | 11 | | 2 | 00/8043 : 85 9D | sta {$9D} + 94 | 1 FPConv.asm 94 | Empty | 11 | | 0 | 00/8045 | + 95 | 1 FPConv.asm 95 | Code | 11 | | 3 | 00/8045 : AD 01 70 | lda {$7000}+1 + 96 | 1 FPConv.asm 96 | Code | 11 | | 2 | 00/8048 : 30 0C | bmi NEG2 ; chk the Hi bit of 1 byte Mantissa + 97 | 1 FPConv.asm 97 | Empty | 11 | | 0 | 00/804A | + 98 | 1 FPConv.asm 98 | Empty | 11 | | 0 | 00/804A | + 99 | 1 FPConv.asm 99 | Code | 11 | | 1 | 00/804A : 18 | POS2 clc + 100 | 1 FPConv.asm 100 | Code | 11 | | 3 | 00/804B : AD 01 70 | lda {$7000}+1 ; M1 Hi 2 Byte --> 9E FAC + 101 | 1 FPConv.asm 101 | Code | 11 | | 1 | 00/804E : 2A | rol ; Multiply for 2^1 + 102 | 1 FPConv.asm 102 | Empty | 11 | | 0 | 00/804F | + 103 | 1 FPConv.asm 103 | Code | 11 | | 2 | 00/804F : 09 80 | ora #$80 ; Set Hi Bit 1 byte Mantissa (change Sign only if is positive) + 104 | 1 FPConv.asm 104 | Code | 11 | | 2 | 00/8051 : 85 9E | sta {$9D}+1 ; To 6^ Byte of FAC Unpacked + 105 | 1 FPConv.asm 105 | Empty | 11 | | 0 | 00/8053 | + 106 | 1 FPConv.asm 106 | Comment | 11 | | 0 | 00/8053 | ;sta FAC+5 ; To 1^ Byte Mantissa of FAC UnPacked + 107 | 1 FPConv.asm 107 | Code | 11 | | 3 | 00/8053 : 4C 63 80 | jmp CONT2 + 108 | 1 FPConv.asm 108 | Empty | 11 | | 0 | 00/8056 | + 109 | 1 FPConv.asm 109 | Code | 11 | | 3 | 00/8056 : AD 01 70 | NEG2 lda {$7000}+1 + 110 | 1 FPConv.asm 110 | Empty | 11 | | 0 | 00/8059 | + 111 | 1 FPConv.asm 111 | Code | 11 | | 1 | 00/8059 : 38 | sec + 112 | 1 FPConv.asm 112 | Code | 11 | | 2 | 00/805A : E9 01 | sbc #01 ; One's complement inv -1 + 113 | 1 FPConv.asm 113 | Code | 11 | | 2 | 00/805C : 49 FF | eor #$FF ; Two's complement inv NOT + 114 | 1 FPConv.asm 114 | Empty | 11 | | 0 | 00/805E | + 115 | 1 FPConv.asm 115 | Code | 11 | | 1 | 00/805E : 2A | rol ; Multiply for 2^1 + 116 | 1 FPConv.asm 116 | Empty | 11 | | 0 | 00/805F | + 117 | 1 FPConv.asm 117 | Code | 11 | | 2 | 00/805F : 85 9E | sta {$9D}+1 ; To 1^ Byte Mantissa of FAC Packed + 118 | 1 FPConv.asm 118 | Code | 11 | | 2 | 00/8061 : 85 A2 | sta {$9D}+5 ; To 6^ Byte of FAC Unpacked + 119 | 1 FPConv.asm 119 | Empty | 11 | | 0 | 00/8063 | + 120 | 1 FPConv.asm 120 | Empty | 11 | | 0 | 00/8063 | + 121 | 1 FPConv.asm 121 | Code | 11 | | 3 | 00/8063 : AD 02 70 | CONT2 lda {$7000}+2 ; M1 3 Byte --> 9F FAC + 122 | 1 FPConv.asm 122 | Code | 11 | | 1 | 00/8066 : 2A | rol + 123 | 1 FPConv.asm 123 | Code | 11 | | 2 | 00/8067 : 85 9F | sta {$9D}+2 + 124 | 1 FPConv.asm 124 | Empty | 11 | | 0 | 00/8069 | + 125 | 1 FPConv.asm 125 | Code | 11 | | 3 | 00/8069 : AD 03 70 | lda {$7000}+3 ; M1 Lo 4 Byte --> A0 FAC + 126 | 1 FPConv.asm 126 | Code | 11 | | 1 | 00/806C : 2A | rol + 127 | 1 FPConv.asm 127 | Code | 11 | | 2 | 00/806D : 85 A0 | sta {$9D}+3 + 128 | 1 FPConv.asm 128 | Empty | 11 | | 0 | 00/806F | + 129 | 1 FPConv.asm 129 | Code | 11 | | 2 | 00/806F : A5 FE | lda {$FE} ; Extra 5 Byte --> A1 FAC + 130 | 1 FPConv.asm 130 | Code | 11 | | 1 | 00/8071 : 2A | rol + 131 | 1 FPConv.asm 131 | Code | 11 | | 2 | 00/8072 : 85 A1 | sta {$9D}+4 + 132 | 1 FPConv.asm 132 | Empty | 11 | | 0 | 00/8074 | + 133 | 1 FPConv.asm 133 | Comment | 11 | | 0 | 00/8074 | ;brk + 134 | 1 FPConv.asm 134 | Comment | 11 | | 0 | 00/8074 | *************************** + 135 | 1 FPConv.asm 135 | Comment | 11 | | 0 | 00/8074 | * + 136 | 1 FPConv.asm 136 | Code | 11 | | 3 | 00/8074 : 20 BE DE | jsr {$DEBE} + 137 | 1 FPConv.asm 137 | Code | 11 | | 3 | 00/8077 : 20 E3 DF | jsr {$DFE3} ; Return the Y and A pointing to the specific variabile + 138 | 1 FPConv.asm 138 | Code | 11 | | 1 | 00/807A : AA | tax + 139 | 1 FPConv.asm 139 | Code | 11 | | 3 | 00/807B : 20 2B EB | jsr {$EB2B} ;FAC->VARIABLE Y (5 Bytes Packed) + 140 | 1 FPConv.asm 140 | Empty | 11 | | 0 | 00/807E | + 141 | 1 FPConv.asm 141 | Comment | 11 | | 0 | 00/807E | ;brk + 142 | 1 FPConv.asm 142 | Code | 11 | | 1 | 00/807E : 60 | rts + 143 | 1 FPConv.asm 143 | Data | 11 | | 1 | 00/807F : 00 | chk +------+----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- diff --git a/AppleII/FP f(x)/FPData b/AppleII/FP f(x)/FPData new file mode 100644 index 0000000000000000000000000000000000000000..83e1d3ce9cf89ebf83b5cabc304df940ff7c9c0c GIT binary patch literal 263 zcmZ9Ey-EW?6ov2XWbXtk%QV8gfQ6lfT})wP#KQVar;uV_Vj<0agn$I5m|`J$09%Dr zL9kFz!A6TD#(;=F%b3O3& dVbbajDXpT_Cs?ZzMyofZ{D;$owz>ZA&@YV6Wn};W literal 0 HcmV?d00001 diff --git a/AppleII/FP f(x)/FPData.asm b/AppleII/FP f(x)/FPData.asm new file mode 100644 index 0000000..6af8b29 --- /dev/null +++ b/AppleII/FP f(x)/FPData.asm @@ -0,0 +1,326 @@ +* +* Unidisk 3.5 DATA +* +* The target of this project is to use the Unidisk 3.5 drive to perform +* specific numerical routines (integers and floating point numbers) +* calculation in order to use it as a Apple II co-processor unit. +* +* Copyright (C) 2015 Riccardo Greco . +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* +* @com.wudsn.ide.asm.hardware=APPLE2 + XC +** CHKSUM Pointer * +PTR equ $08 +** Protocol Converter Call +ZPTempL equ $0006 ;Temporary zero page storage +ZPTempH equ $0007 +** Zero page storage ** +N1 equ $FA ;25 4 Byte FP FA--FD (FP1) +N2 equ $EC ;27 4 Byte FP EC--EF (FP2) +RSLT equ $7000 ;29 +*** Monitor routines *** +COut equ $FDED ;Console output ASCII +CROut equ $FD8E ;Carriage return +** Command Code ** +StatusCmd equ 0 +** Status Code ** +StatusUNI equ 5 +* +ControlCmd equ 4 +** Control Codes ** +Run equ 5 +SetDWLoad equ 6 +DWLoad equ 7 +* + org $6000 +***************************************************** +************** CHKSUM MAIN Routine ****************** +* +;STARTCHK lda #STARTCHK +; sta PTR+1 +; ldy #$00 +; lda #$00 +; pha +;LOOP pla +; eor (PTR),y +; pha +; inc PTR +; bne CHK +; inc PTR+1 +;CHK lda PTR+1 +; cmp #>PROGEND +; bcc LOOP +; lda PTR +; cmp # + 3 | 1 FPData.asm 3 | Comment | 11 | | 0 | 00/8000 | * + 4 | 1 FPData.asm 4 | Comment | 11 | | 0 | 00/8000 | * The target of this project is to use the Unidisk 3.5 drive to perform + 5 | 1 FPData.asm 5 | Comment | 11 | | 0 | 00/8000 | * specific numerical routines (integers and floating point numbers) + 6 | 1 FPData.asm 6 | Comment | 11 | | 0 | 00/8000 | * calculation in order to use it as a Apple II co-processor unit. + 7 | 1 FPData.asm 7 | Comment | 11 | | 0 | 00/8000 | * + 8 | 1 FPData.asm 8 | Comment | 11 | | 0 | 00/8000 | * Copyright (C) 2015 Riccardo Greco . + 9 | 1 FPData.asm 9 | Comment | 11 | | 0 | 00/8000 | * + 10 | 1 FPData.asm 10 | Comment | 11 | | 0 | 00/8000 | * This program is free software: you can redistribute it and/or modify + 11 | 1 FPData.asm 11 | Comment | 11 | | 0 | 00/8000 | * it under the terms of the GNU General Public License as published by + 12 | 1 FPData.asm 12 | Comment | 11 | | 0 | 00/8000 | * the Free Software Foundation, either version 3 of the License, or + 13 | 1 FPData.asm 13 | Comment | 11 | | 0 | 00/8000 | * (at your option) any later version. + 14 | 1 FPData.asm 14 | Comment | 11 | | 0 | 00/8000 | * This program is distributed in the hope that it will be useful, + 15 | 1 FPData.asm 15 | Comment | 11 | | 0 | 00/8000 | * but WITHOUT ANY WARRANTY; without even the implied warranty of + 16 | 1 FPData.asm 16 | Comment | 11 | | 0 | 00/8000 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 17 | 1 FPData.asm 17 | Comment | 11 | | 0 | 00/8000 | * GNU General Public License for more details. + 18 | 1 FPData.asm 18 | Comment | 11 | | 0 | 00/8000 | * You should have received a copy of the GNU General Public License + 19 | 1 FPData.asm 19 | Comment | 11 | | 0 | 00/8000 | * along with this program. If not, see . + 20 | 1 FPData.asm 20 | Comment | 11 | | 0 | 00/8000 | * + 21 | 1 FPData.asm 21 | Comment | 11 | | 0 | 00/8000 | * + 22 | 1 FPData.asm 22 | Comment | 11 | | 0 | 00/8000 | * @com.wudsn.ide.asm.hardware=APPLE2 + 23 | 1 FPData.asm 23 | Directive | 11 | | 0 | 00/8000 | XC + 24 | 1 FPData.asm 24 | Comment | 11 | | 0 | 00/8000 | ** CHKSUM Pointer * + 25 | 1 FPData.asm 25 | Equivalence | 11 | | 0 | 00/8000 | PTR equ $08 + 26 | 1 FPData.asm 26 | Comment | 11 | | 0 | 00/8000 | ** Protocol Converter Call + 27 | 1 FPData.asm 27 | Equivalence | 11 | | 0 | 00/8000 | ZPTempL equ $0006 ;Temporary zero page storage + 28 | 1 FPData.asm 28 | Equivalence | 11 | | 0 | 00/8000 | ZPTempH equ $0007 + 29 | 1 FPData.asm 29 | Comment | 11 | | 0 | 00/8000 | ** Zero page storage ** + 30 | 1 FPData.asm 30 | Equivalence | 11 | | 0 | 00/8000 | N1 equ $FA ;25 4 Byte FP FA--FD (FP1) + 31 | 1 FPData.asm 31 | Equivalence | 11 | | 0 | 00/8000 | N2 equ $EC ;27 4 Byte FP EC--EF (FP2) + 32 | 1 FPData.asm 32 | Equivalence | 11 | | 0 | 00/8000 | RSLT equ $7000 ;29 + 33 | 1 FPData.asm 33 | Comment | 11 | | 0 | 00/8000 | *** Monitor routines *** + 34 | 1 FPData.asm 34 | Equivalence | 11 | | 0 | 00/8000 | COut equ $FDED ;Console output ASCII + 35 | 1 FPData.asm 35 | Equivalence | 11 | | 0 | 00/8000 | CROut equ $FD8E ;Carriage return + 36 | 1 FPData.asm 36 | Comment | 11 | | 0 | 00/8000 | ** Command Code ** + 37 | 1 FPData.asm 37 | Equivalence | 11 | | 0 | 00/8000 | StatusCmd equ 0 + 38 | 1 FPData.asm 38 | Comment | 11 | | 0 | 00/8000 | ** Status Code ** + 39 | 1 FPData.asm 39 | Equivalence | 11 | | 0 | 00/8000 | StatusUNI equ 5 + 40 | 1 FPData.asm 40 | Comment | 11 | | 0 | 00/8000 | * + 41 | 1 FPData.asm 41 | Equivalence | 11 | | 0 | 00/8000 | ControlCmd equ 4 + 42 | 1 FPData.asm 42 | Comment | 11 | | 0 | 00/8000 | ** Control Codes ** + 43 | 1 FPData.asm 43 | Equivalence | 11 | | 0 | 00/8000 | Run equ 5 + 44 | 1 FPData.asm 44 | Equivalence | 11 | | 0 | 00/8000 | SetDWLoad equ 6 + 45 | 1 FPData.asm 45 | Equivalence | 11 | | 0 | 00/8000 | DWLoad equ 7 + 46 | 1 FPData.asm 46 | Comment | 11 | | 0 | 00/8000 | * + 47 | 1 FPData.asm 47 | Directive | 11 | | 0 | 00/8000 | org $6000 + 48 | 1 FPData.asm 48 | Comment | 11 | | 0 | 00/6000 | ***************************************************** + 49 | 1 FPData.asm 49 | Comment | 11 | | 0 | 00/6000 | ************** CHKSUM MAIN Routine ****************** + 50 | 1 FPData.asm 50 | Comment | 11 | | 0 | 00/6000 | * + 51 | 1 FPData.asm 51 | Comment | 11 | | 0 | 00/6000 | ;STARTCHK lda #STARTCHK + 54 | 1 FPData.asm 54 | Comment | 11 | | 0 | 00/6000 | ; sta PTR+1 + 55 | 1 FPData.asm 55 | Comment | 11 | | 0 | 00/6000 | ; ldy #$00 + 56 | 1 FPData.asm 56 | Comment | 11 | | 0 | 00/6000 | ; lda #$00 + 57 | 1 FPData.asm 57 | Comment | 11 | | 0 | 00/6000 | ; pha + 58 | 1 FPData.asm 58 | Comment | 11 | | 0 | 00/6000 | ;LOOP pla + 59 | 1 FPData.asm 59 | Comment | 11 | | 0 | 00/6000 | ; eor (PTR),y + 60 | 1 FPData.asm 60 | Comment | 11 | | 0 | 00/6000 | ; pha + 61 | 1 FPData.asm 61 | Comment | 11 | | 0 | 00/6000 | ; inc PTR + 62 | 1 FPData.asm 62 | Comment | 11 | | 0 | 00/6000 | ; bne CHK + 63 | 1 FPData.asm 63 | Comment | 11 | | 0 | 00/6000 | ; inc PTR+1 + 64 | 1 FPData.asm 64 | Comment | 11 | | 0 | 00/6000 | ;CHK lda PTR+1 + 65 | 1 FPData.asm 65 | Comment | 11 | | 0 | 00/6000 | ; cmp #>PROGEND + 66 | 1 FPData.asm 66 | Comment | 11 | | 0 | 00/6000 | ; bcc LOOP + 67 | 1 FPData.asm 67 | Comment | 11 | | 0 | 00/6000 | ; lda PTR + 68 | 1 FPData.asm 68 | Comment | 11 | | 0 | 00/6000 | ; cmp #Azxf4IjQB-UZ1HJR zZ1YQ|=<&;@_|C7GanCKV5!dr^_#+lUn^1r1d<2e)&L`kn(fJHKQM9N3gJMK4f|as8 zma-8e%c&Le{w;(lm1+k&IVhKno;{B8XoaNj>x`sfOvh-fkI@5ybnOFRv~RkG^F-GU z)}&9c zkk8dK4}=eCE3u{)8#UE720&bT10PccrmMK)=B#AZUu&+q)n?6Y2S34HVp6Drw^-dKNEyE8 +* +* The target of this project is to use the Unidisk 3.5 drive to perform +* specific numerical routines (integers and floating point numbers) +* calculation in order to use it as a Apple II co-processor unit. +* +* Copyright (C) 2015 Riccardo Greco . +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* +* @com.wudsn.ide.asm.hardware=APPLE2 +* +* Protocol Converter Call + XC +ZPTempL equ $0006 ;Temporary zero page storage +ZPTempH equ $0007 +** Zero page storage ** +N1 equ $FA ;25 4 Byte FP FA--FD (FP1) +N2 equ $EC ;27 4 Byte FP EC--EF (FP2) +RSLT equ $7000 ;29 +*** Monitor routines *** +COut equ $FDED ;Console output ASCII +CROut equ $FD8E ;Carriage return +** Command Code ** +StatusCmd equ 0 +** Status Code ** +* StatusDIB equ 3 +StatusUNI equ 5 +* +ControlCmd equ 4 +** Control Codes ** +Eject equ 4 +Run equ 5 +SetDWLoad equ 6 +DWLoad equ 7 +* + org $6000 +***************************************************** + +* +* Find a Protocol Converter in one of the slots. +START jsr FindPC + bcs Error +*** Eject *** + jsr Dispatch + dfb ControlCmd + dw E_JECT +*** Set Address *** + jsr Dispatch + dfb ControlCmd + dw SET_ADD +* + jsr EXEC ; Jump the Error routine + rts +********************************************* +Error equ * +* +* There is either no PC around, or there was no give message +* + ldx #0 +err1 equ * + lda Message,x + beq errout + jsr COut + inx + bne err1 +* +errout equ * + rts +* +Message asc 'NO PC OR NO DEVICE' + dfb $8D,0 +********************************************* +* + +** Set the Input Value first in Dynamic data ** + ** 4 Byte N1 to FP1 ** +EXEC lda N1 ;X1 + sta $6238 ; Absolute addressing + lda N1+1 ;M1 (1) + sta $6239 + lda N1+2 ;M1 (2) + sta $623A + lda N1+3 ;M1 (3) + sta $623B + + ** 4 Byte N2 to FP2 ** + lda N2 ;X2 + sta $623C + lda N2+1 ;M2 (1) + sta $623D + lda N2+2 ;M2 (2) + sta $623E + lda N2+3 ;M2 (3) + sta $623F + +*** Download *** + jsr Dispatch + dfb ControlCmd + dw DOWNLOAD + +** Set Unidisk Registers ** +* ;First time execution + lda #$00 ; Target the first time entry point + sta LowPC_reg ; First time set init value of PC, just for the next execution +* The program begin to PC preset to $0500 * +* +** Execute ** + jsr Dispatch + dfb ControlCmd + dw EXE +** Read ** +READ jsr Dispatch + dfb StatusCmd + dw DParms + bcs Error + +**** Store Output results in //c **** + +* First time execute * + lda UNIAcc_reg + sta RSLT + lda UNIX_reg + sta RSLT+1 ; Store the result + lda UNIY_reg + sta RSLT+2 + +** Second time execute ** + lda #$3C ; Target the secont time entry point + sta LowPC_reg ; Second time set new value of PC +** Execute ** + jsr Dispatch + dfb ControlCmd + dw EXE +** Read ** + jsr Dispatch + dfb StatusCmd + dw DParms +* bcs Error + +* Second time execute only to read the latest Byte of FP1* + lda UNIAcc_reg + sta RSLT+3 +* + rts + +****************************************************** +FindPC equ * +* +* Search slot 7 to slot 1 looking for signature bytes +* + ldx #7 ;Do for seven slots + lda #$C7 + sta ZPTempH + lda #$00 + sta ZPTempL +* +newslot equ * + ldy #7 +* +again equ * + lda (ZPTempL),y + cmp sigtab,y ;One for byte signature + beq maybe ;Found one signature byte + dec ZPTempH + dex + bne newslot +* +* if we get here, no PC find + sec + rts +* +* if we get here, no byte find on PC +maybe equ * + dey + dey ;if N=1 then all sig bytes OK + bpl again +* Found PC interface. Set up call address. +* we already have high byte ($CN), we need low byte +* +foundPC equ * + lda #$FF + sta ZPTempL + ldy #0 ;For indirect load + lda (ZPTempL),y ;Get the byte +* +* Now the Acc has the low oreder ProDOS entry point. +* The PC entry is three locations past this ... +* + clc + adc #3 + sta ZPTempL +* +* Now ZPTempL has PC entry point. +* Return with carry clear. +* + clc + rts +*********************************************************** +* +* There are the PC signature bytes in their relative order. +* The $FF bytes are filler bytes and are not compared. +* +sigtab dfb $FF,$20,$FF,$00 + dfb $FF,$03,$FF,$00 +* +Dispatch equ * + jmp (ZPTempL) ;Simulate an indirect JSR to PC +* +*** Status Parameter Set for UNI *** +DParms equ * +DPParmsCt dfb 3 ;Status calls have three parameters +DPUnit dfb 1 +DPBuffer dw UNI +DPStatCode dfb StatusUNI +* +* +* +*** Status List UNI *** +UNI equ * + dfb 0 +UNIError dfb 0 +UNIRetries dfb 0 +UNIAcc_reg dfb 0 +UNIX_reg dfb 0 +UNIY_reg dfb 0 +UNIP_val dfb 0 +HHH dfb 0 +* +*** Set Address *** +SET_ADD equ * + dfb 3 + dfb 1 + dw CNTL_LIST3 + dfb SetDWLoad +* +*** Download *** +DOWNLOAD equ * + dfb 3 + dfb 1 + dw CNTL_LIST4 + dfb DWLoad +* +*** Execute *** +EXE equ * + dfb 3 + dfb 1 + dw CNTL_LIST2 + dfb Run +*** Eject *** +E_JECT equ * + dfb 3 + dfb 1 + dw CNTL_LIST1 + dfb Eject +* +******** CONTROL LISTS ******** +* +* +*** Eject *** +CNTL_LIST1 equ * + dw $0000 +* +*** Execute *** +CNTL_LIST2 equ * +Clow_byte dfb $06 +Chigh_byte dfb $00 +AccValue dfb $00 ; Init Value Unidisk Accumulator Register +X_reg dfb $00 ; Init Value Unidisk X Register +Y_reg dfb $00 ; Init Value Unidisk Y Register +ProStatus dfb $00 ; Init Value Unidisk Status Register +LowPC_reg dfb $00 ; Init Value Unidisk Program Counter $0500 at eny dowload +HighPC_reg dfb $05 ; $05 first execution, $3C second execution +* +*** Set Address *** +CNTL_LIST3 equ * +CountL_byte dfb $02 +CountH_byte dfb $00 +LByte_Addr dfb $00 ; ORG of Unidisk program, set begin program address $0500 +HByte_Addr dfb $05 +* +*** Download *** +CNTL_LIST4 equ * +LenghtL_byte dfb $34 ;<----- Lenght of Unidisk program Lo - Byte 312 byte +LenghtH_byte dfb $01 ;<----- Lenght of Unidisk program Hi Byte +* +**************** Start UNIDISK Program **************** +* + org $0500 ; Start Unidisk program address + +SIGN EQU $C0 ;$EB ; $F3 + + ** FP2 4 Bytes ** +X2 EQU $C1 ;$EC ; $F4 +M2 EQU $C2 ;$ED ; $F5 - $F7 + + ** FP1 4 Bytes + E extension ** +X1 EQU $C5 ;$FA ; $F8 +M1 EQU $C6 ;$FB ; $F9 - $FB +E EQU $C9 ;$FE ; $FC + +OVLOC EQU $C10 ;$3F5 ;Overflow routine is not implemented at now) + +* +** Main program ** +* +** Input data to Zero Page ** + + ** FP1 ** + lda FP1 + sta X1 + + lda FP1+1 + sta M1 + lda FP1+2 + sta M1+1 + lda FP1+3 + sta M1+2 + + ** FP2 ** + lda FP2 + sta X2 + + lda FP2+1 + sta M2 + lda FP2+2 + sta M2+1 + lda FP2+3 + sta M2+2 + +************************** Target Function *********************** +* Y=N1*N2 * +****************************************************************** +* +** Simple MUL ** + jsr FMUL ;FMUL ; Call FP routine + +*** Output Data result FP1 to Unidisk registers First Time first 3 Byte out *** + lda X1 + ldx M1 + ldy M1+1 + + rts +*** Output Data result FP1 to Unidisk registers Second Time latest 1 Byte out *** +SECOND lda M1+2 ; Entry point by Program Counter set + + rts +*************************************************** +* +***************** FP Routine ***************** +* + *********************** + * * + * APPLE-II FLOATING * + * POINT ROUTINES * + * * + * COPYRIGHT 1977 BY * + * APPLE COMPUTER INC. * + * * + * ALL RIGHTS RESERVED * + * * + * S. WOZNIAK * + * * + *********************** +* TITLE "FLOATING POINT ROUTINES for Unidisk memory" +* + +ADD CLC ;CLEAR CARRY + LDX #$2 ;INDEX FOR 3-BYTE ADD. +ADD1 LDA M1,X + ADC M2,X ;ADD A BYTE OF MANT2 TO MANT1 + STA M1,X + DEX ;INDEX TO NEXT MORE SIGNIF. BYTE. + BPL ADD1 ;LOOP UNTIL DONE. + RTS ;RETURN +MD1 ASL SIGN ;CLEAR LSB OF SIGN. + JSR ABSWAP ;ABS VAL OF M1, THEN SWAP WITH M2 +ABSWAP BIT M1 ;MANT1 NEGATIVE? + BPL ABSWAP1 ;NO, SWAP WITH MANT2 AND RETURN. + JSR FCOMPL ;YES, COMPLEMENT IT. + INC SIGN ;INCR SIGN, COMPLEMENTING LSB. +ABSWAP1 SEC ;SET CARRY FOR RETURN TO MUL/DIV. +SWAP LDX #$4 ;INDEX FOR 4 BYTE SWAP. +SWAP1 STY E-1,X + LDA X1-1,X ;SWAP A BYTE OF EXP/MANT1 WITH + LDY X2-1,X ;EXP/MANT2 AND LEAVE A COPY OF + STY X1-1,X ;MANT1 IN E (3 BYTES). E+3 USED + STA X2-1,X + DEX ;ADVANCE INDEX TO NEXT BYTE + BNE SWAP1 ;LOOP UNTIL DONE. + RTS ;RETURN +FLOAT LDA #$8E ;INIT EXP1 TO 14, <--------------- int to fp + STA X1 ;THEN NORMALIZE TO FLOAT. +NORM1 LDA M1 ;HIGH-ORDER MANT1 BYTE. + CMP #$C0 ;UPPER TWO BITS UNEQUAL? + BMI RTS1 ;YES, RETURN WITH MANT1 NORMALIZED + DEC X1 ;DECREMENT EXP1. + ASL M1+2 + ROL M1+1 ;SHIFT MANT1 (3 BYTES) LEFT. + ROL M1 +NORM LDA X1 ;EXP1 ZERO? + BNE NORM1 ;NO, CONTINUE NORMALIZING. +RTS1 RTS ;RETURN. +FSUB JSR FCOMPL ;CMPL MANT1,CLEARS CARRY UNLESS 0 <---- sub +SWPALGN JSR ALGNSWP ;RIGHT SHIFT MANT1 OR SWAP WITH +FADD LDA X2 ;<------------------------------------- add + CMP X1 ;COMPARE EXP1 WITH EXP2. + BNE SWPALGN ;IF #,SWAP ADDENDS OR ALIGN MANTS. + JSR ADD ;ADD ALIGNED MANTISSAS. +ADDEND BVC NORM ;NO OVERFLOW, NORMALIZE RESULT. + BVS RTLOG ;OV: SHIFT M1 RIGHT, CARRY INTO SIGN +ALGNSWP BCC SWAP ;SWAP IF CARRY CLEAR, + * ELSE SHIFT RIGHT ARITH. +RTAR LDA M1 ;SIGN OF MANT1 INTO CARRY FOR + ASL ;RIGHT ARITH SHIFT. +RTLOG INC X1 ;INCR X1 TO ADJUST FOR RIGHT SHIFT + BEQ OVFL ;EXP1 OUT OF RANGE. +RTLOG1 LDX #$FA ;INDEX FOR 6:BYTE RIGHT SHIFT. +ROR1 ROR E+3,X + INX ;NEXT BYTE OF SHIFT. + BNE ROR1 ;LOOP UNTIL DONE. + RTS ;RETURN. +FMUL JSR MD1 ;ABS VAL OF MANT1, MANT2 <-------------- mul + ADC X1 ;ADD EXP1 TO EXP2 FOR PRODUCT EXP + JSR MD2 ;CHECK PROD. EXP AND PREP. FOR MUL + CLC ;CLEAR CARRY FOR FIRST BIT. +MUL1 JSR RTLOG1 ;M1 AND E RIGHT (PROD AND MPLIER) + BCC MUL2 ;IF CARRY CLEAR, SKIP PARTIAL PROD + JSR ADD ;ADD MULTIPLICAND TO PRODUCT. +MUL2 DEY ;NEXT MUL ITERATION. + BPL MUL1 ;LOOP UNTIL DONE. +MDEND LSR SIGN ;TEST SIGN LSB. +NORMX BCC NORM ;IF EVEN,NORMALIZE PROD,ELSE COMP +FCOMPL SEC ;SET CARRY FOR SUBTRACT. <--------------- not + LDX #$3 ;INDEX FOR 3 BYTE SUBTRACT. +COMPL1 LDA #$0 ;CLEAR A. + SBC X1,X ;SUBTRACT BYTE OF EXP1. + STA X1,X ;RESTORE IT. + DEX ;NEXT MORE SIGNIFICANT BYTE. + BNE COMPL1 ;LOOP UNTIL DONE. + BEQ ADDEND ;NORMALIZE (OR SHIFT RT IF OVFL). +FDIV JSR MD1 ;TAKE ABS VAL OF MANT1, MANT2. <--------- div + SBC X1 ;SUBTRACT EXP1 FROM EXP2. + JSR MD2 ;SAVE AS QUOTIENT EXP. +DIV1 SEC ;SET CARRY FOR SUBTRACT. + LDX #$2 ;INDEX FOR 3-BYTE SUBTRACTION. +DIV2 LDA M2,X + SBC E,X ;SUBTRACT A BYTE OF E FROM MANT2. + PHA ;SAVE ON STACK. + DEX ;NEXT MORE SIGNIFICANT BYTE. + BPL DIV2 ;LOOP UNTIL DONE. + LDX #$FD ;INDEX FOR 3-BYTE CONDITIONAL MOVE +DIV3 PLA ;PULL BYTE OF DIFFERENCE OFF STACK + BCC DIV4 ;IF M2 + 3 | 1 FPMain.asm 3 | Comment | 11 | | 0 | 00/8000 | * + 4 | 1 FPMain.asm 4 | Comment | 11 | | 0 | 00/8000 | * The target of this project is to use the Unidisk 3.5 drive to perform + 5 | 1 FPMain.asm 5 | Comment | 11 | | 0 | 00/8000 | * specific numerical routines (integers and floating point numbers) + 6 | 1 FPMain.asm 6 | Comment | 11 | | 0 | 00/8000 | * calculation in order to use it as a Apple II co-processor unit. + 7 | 1 FPMain.asm 7 | Comment | 11 | | 0 | 00/8000 | * + 8 | 1 FPMain.asm 8 | Comment | 11 | | 0 | 00/8000 | * Copyright (C) 2015 Riccardo Greco . + 9 | 1 FPMain.asm 9 | Comment | 11 | | 0 | 00/8000 | * + 10 | 1 FPMain.asm 10 | Comment | 11 | | 0 | 00/8000 | * This program is free software: you can redistribute it and/or modify + 11 | 1 FPMain.asm 11 | Comment | 11 | | 0 | 00/8000 | * it under the terms of the GNU General Public License as published by + 12 | 1 FPMain.asm 12 | Comment | 11 | | 0 | 00/8000 | * the Free Software Foundation, either version 3 of the License, or + 13 | 1 FPMain.asm 13 | Comment | 11 | | 0 | 00/8000 | * (at your option) any later version. + 14 | 1 FPMain.asm 14 | Comment | 11 | | 0 | 00/8000 | * This program is distributed in the hope that it will be useful, + 15 | 1 FPMain.asm 15 | Comment | 11 | | 0 | 00/8000 | * but WITHOUT ANY WARRANTY; without even the implied warranty of + 16 | 1 FPMain.asm 16 | Comment | 11 | | 0 | 00/8000 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 17 | 1 FPMain.asm 17 | Comment | 11 | | 0 | 00/8000 | * GNU General Public License for more details. + 18 | 1 FPMain.asm 18 | Comment | 11 | | 0 | 00/8000 | * You should have received a copy of the GNU General Public License + 19 | 1 FPMain.asm 19 | Comment | 11 | | 0 | 00/8000 | * along with this program. If not, see . + 20 | 1 FPMain.asm 20 | Comment | 11 | | 0 | 00/8000 | * + 21 | 1 FPMain.asm 21 | Comment | 11 | | 0 | 00/8000 | * + 22 | 1 FPMain.asm 22 | Comment | 11 | | 0 | 00/8000 | * @com.wudsn.ide.asm.hardware=APPLE2 + 23 | 1 FPMain.asm 23 | Comment | 11 | | 0 | 00/8000 | * + 24 | 1 FPMain.asm 24 | Comment | 11 | | 0 | 00/8000 | * Protocol Converter Call + 25 | 1 FPMain.asm 25 | Directive | 11 | | 0 | 00/8000 | XC + 26 | 1 FPMain.asm 26 | Equivalence | 11 | | 0 | 00/8000 | ZPTempL equ $0006 ;Temporary zero page storage + 27 | 1 FPMain.asm 27 | Equivalence | 11 | | 0 | 00/8000 | ZPTempH equ $0007 + 28 | 1 FPMain.asm 28 | Comment | 11 | | 0 | 00/8000 | ** Zero page storage ** + 29 | 1 FPMain.asm 29 | Equivalence | 11 | | 0 | 00/8000 | N1 equ $FA ;25 4 Byte FP FA--FD (FP1) + 30 | 1 FPMain.asm 30 | Equivalence | 11 | | 0 | 00/8000 | N2 equ $EC ;27 4 Byte FP EC--EF (FP2) + 31 | 1 FPMain.asm 31 | Equivalence | 11 | | 0 | 00/8000 | RSLT equ $7000 ;29 + 32 | 1 FPMain.asm 32 | Comment | 11 | | 0 | 00/8000 | *** Monitor routines *** + 33 | 1 FPMain.asm 33 | Equivalence | 11 | | 0 | 00/8000 | COut equ $FDED ;Console output ASCII + 34 | 1 FPMain.asm 34 | Equivalence | 11 | | 0 | 00/8000 | CROut equ $FD8E ;Carriage return + 35 | 1 FPMain.asm 35 | Comment | 11 | | 0 | 00/8000 | ** Command Code ** + 36 | 1 FPMain.asm 36 | Equivalence | 11 | | 0 | 00/8000 | StatusCmd equ 0 + 37 | 1 FPMain.asm 37 | Comment | 11 | | 0 | 00/8000 | ** Status Code ** + 38 | 1 FPMain.asm 38 | Comment | 11 | | 0 | 00/8000 | * StatusDIB equ 3 + 39 | 1 FPMain.asm 39 | Equivalence | 11 | | 0 | 00/8000 | StatusUNI equ 5 + 40 | 1 FPMain.asm 40 | Comment | 11 | | 0 | 00/8000 | * + 41 | 1 FPMain.asm 41 | Equivalence | 11 | | 0 | 00/8000 | ControlCmd equ 4 + 42 | 1 FPMain.asm 42 | Comment | 11 | | 0 | 00/8000 | ** Control Codes ** + 43 | 1 FPMain.asm 43 | Equivalence | 11 | | 0 | 00/8000 | Eject equ 4 + 44 | 1 FPMain.asm 44 | Equivalence | 11 | | 0 | 00/8000 | Run equ 5 + 45 | 1 FPMain.asm 45 | Equivalence | 11 | | 0 | 00/8000 | SetDWLoad equ 6 + 46 | 1 FPMain.asm 46 | Equivalence | 11 | | 0 | 00/8000 | DWLoad equ 7 + 47 | 1 FPMain.asm 47 | Comment | 11 | | 0 | 00/8000 | * + 48 | 1 FPMain.asm 48 | Directive | 11 | | 0 | 00/8000 | org $6000 + 49 | 1 FPMain.asm 49 | Comment | 11 | | 0 | 00/6000 | ***************************************************** + 50 | 1 FPMain.asm 50 | Empty | 11 | | 0 | 00/6000 | + 51 | 1 FPMain.asm 51 | Comment | 11 | | 0 | 00/6000 | * + 52 | 1 FPMain.asm 52 | Comment | 11 | | 0 | 00/6000 | * Find a Protocol Converter in one of the slots. + 53 | 1 FPMain.asm 53 | Code | 11 | | 3 | 00/6000 : 20 A2 60 | START jsr {ozunid_4} + 54 | 1 FPMain.asm 54 | Code | 11 | | 2 | 00/6003 : B0 10 | bcs {ozunid_1} + 55 | 1 FPMain.asm 55 | Comment | 11 | | 0 | 00/6005 | *** Eject *** + 56 | 1 FPMain.asm 56 | Code | 11 | | 3 | 00/6005 : 20 D7 60 | jsr {ozunid_9} + 57 | 1 FPMain.asm 57 | Data | 11 | | 1 | 00/6008 : 04 | dfb {4} + 58 | 1 FPMain.asm 58 | Data | 11 | | 2 | 00/6009 : F6 60 | dw {ozunid_15} + 59 | 1 FPMain.asm 59 | Comment | 11 | | 0 | 00/600B | *** Set Address *** + 60 | 1 FPMain.asm 60 | Code | 11 | | 3 | 00/600B : 20 D7 60 | jsr {ozunid_9} + 61 | 1 FPMain.asm 61 | Data | 11 | | 1 | 00/600E : 04 | dfb {4} + 62 | 1 FPMain.asm 62 | Data | 11 | | 2 | 00/600F : E7 60 | dw {ozunid_12} + 63 | 1 FPMain.asm 63 | Comment | 11 | | 0 | 00/6011 | * + 64 | 1 FPMain.asm 64 | Code | 11 | | 3 | 00/6011 : 20 37 60 | jsr EXEC ; Jump the Error routine + 65 | 1 FPMain.asm 65 | Code | 11 | | 1 | 00/6014 : 60 | rts + 66 | 1 FPMain.asm 66 | Comment | 11 | | 0 | 00/6015 | ********************************************* + 67 | 1 FPMain.asm 67 | Empty | 11 | | 0 | 00/6015 | ozunid_1 + 68 | 1 FPMain.asm 67 | Equivalence | 11 | | 0 | 00/6015 | Error equ ozunid_1 + 69 | 1 FPMain.asm 68 | Comment | 11 | | 0 | 00/6015 | * + 70 | 1 FPMain.asm 69 | Comment | 11 | | 0 | 00/6015 | * There is either no PC around, or there was no give message + 71 | 1 FPMain.asm 70 | Comment | 11 | | 0 | 00/6015 | * + 72 | 1 FPMain.asm 71 | Code | 11 | | 2 | 00/6015 : A2 00 | ldx #0 + 73 | 1 FPMain.asm 72 | Empty | 11 | | 0 | 00/6017 | ozunid_2 + 74 | 1 FPMain.asm 72 | Equivalence | 11 | | 0 | 00/6017 | err1 equ ozunid_2 + 75 | 1 FPMain.asm 73 | Code | 11 | | 3 | 00/6017 : BD 23 60 | lda Message,x + 76 | 1 FPMain.asm 74 | Code | 11 | | 2 | 00/601A : F0 06 | beq {ozunid_3} + 77 | 1 FPMain.asm 75 | Code | 11 | | 3 | 00/601C : 20 ED FD | jsr {$FDED} + 78 | 1 FPMain.asm 76 | Code | 11 | | 1 | 00/601F : E8 | inx + 79 | 1 FPMain.asm 77 | Code | 11 | | 2 | 00/6020 : D0 F5 | bne {ozunid_2} + 80 | 1 FPMain.asm 78 | Comment | 11 | | 0 | 00/6022 | * + 81 | 1 FPMain.asm 79 | Empty | 11 | | 0 | 00/6022 | ozunid_3 + 82 | 1 FPMain.asm 79 | Equivalence | 11 | | 0 | 00/6022 | errout equ ozunid_3 + 83 | 1 FPMain.asm 80 | Code | 11 | | 1 | 00/6022 : 60 | rts + 84 | 1 FPMain.asm 81 | Comment | 11 | | 0 | 00/6023 | * + 85 | 1 FPMain.asm 82 | Data | 11 | | 18 | 00/6023 : 4E 4F 20 50 | Message asc 'NO PC OR NO DEVICE' + | | | | | | 43 20 4F 52 | + | | | | | | 20 4E 4F 20 | + | | | | | | 44 45 56 49 | + | | | | | | 43 45 | + 86 | 1 FPMain.asm 83 | Data | 11 | | 2 | 00/6035 : 8D 00 | dfb $8D,0 + 87 | 1 FPMain.asm 84 | Comment | 11 | | 0 | 00/6037 | ********************************************* + 88 | 1 FPMain.asm 85 | Comment | 11 | | 0 | 00/6037 | * + 89 | 1 FPMain.asm 86 | Empty | 11 | | 0 | 00/6037 | + 90 | 1 FPMain.asm 87 | Comment | 11 | | 0 | 00/6037 | ** Set the Input Value first in Dynamic data ** + 91 | 1 FPMain.asm 88 | Comment | 11 | | 0 | 00/6037 | ** 4 Byte N1 to FP1 ** + 92 | 1 FPMain.asm 89 | Code | 11 | | 2 | 00/6037 : A5 FA | EXEC lda {$FA} ;X1 + 93 | 1 FPMain.asm 90 | Code | 11 | | 3 | 00/6039 : 8D 38 62 | sta $6238 ; Absolute addressing + 94 | 1 FPMain.asm 91 | Code | 11 | | 2 | 00/603C : A5 FB | lda {$FA}+1 ;M1 (1) + 95 | 1 FPMain.asm 92 | Code | 11 | | 3 | 00/603E : 8D 39 62 | sta $6239 + 96 | 1 FPMain.asm 93 | Code | 11 | | 2 | 00/6041 : A5 FC | lda {$FA}+2 ;M1 (2) + 97 | 1 FPMain.asm 94 | Code | 11 | | 3 | 00/6043 : 8D 3A 62 | sta $623A + 98 | 1 FPMain.asm 95 | Code | 11 | | 2 | 00/6046 : A5 FD | lda {$FA}+3 ;M1 (3) + 99 | 1 FPMain.asm 96 | Code | 11 | | 3 | 00/6048 : 8D 3B 62 | sta $623B + 100 | 1 FPMain.asm 97 | Empty | 11 | | 0 | 00/604B | + 101 | 1 FPMain.asm 98 | Comment | 11 | | 0 | 00/604B | ** 4 Byte N2 to FP2 ** + 102 | 1 FPMain.asm 99 | Code | 11 | | 2 | 00/604B : A5 EC | lda {$EC} ;X2 + 103 | 1 FPMain.asm 100 | Code | 11 | | 3 | 00/604D : 8D 3C 62 | sta $623C + 104 | 1 FPMain.asm 101 | Code | 11 | | 2 | 00/6050 : A5 ED | lda {$EC}+1 ;M2 (1) + 105 | 1 FPMain.asm 102 | Code | 11 | | 3 | 00/6052 : 8D 3D 62 | sta $623D + 106 | 1 FPMain.asm 103 | Code | 11 | | 2 | 00/6055 : A5 EE | lda {$EC}+2 ;M2 (2) + 107 | 1 FPMain.asm 104 | Code | 11 | | 3 | 00/6057 : 8D 3E 62 | sta $623E + 108 | 1 FPMain.asm 105 | Code | 11 | | 2 | 00/605A : A5 EF | lda {$EC}+3 ;M2 (3) + 109 | 1 FPMain.asm 106 | Code | 11 | | 3 | 00/605C : 8D 3F 62 | sta $623F + 110 | 1 FPMain.asm 107 | Empty | 11 | | 0 | 00/605F | + 111 | 1 FPMain.asm 108 | Comment | 11 | | 0 | 00/605F | *** Download *** + 112 | 1 FPMain.asm 109 | Code | 11 | | 3 | 00/605F : 20 D7 60 | jsr {ozunid_9} + 113 | 1 FPMain.asm 110 | Data | 11 | | 1 | 00/6062 : 04 | dfb {4} + 114 | 1 FPMain.asm 111 | Data | 11 | | 2 | 00/6063 : EC 60 | dw {ozunid_13} + 115 | 1 FPMain.asm 112 | Empty | 11 | | 0 | 00/6065 | + 116 | 1 FPMain.asm 113 | Comment | 11 | | 0 | 00/6065 | ** Set Unidisk Registers ** + 117 | 1 FPMain.asm 114 | Comment | 11 | | 0 | 00/6065 | * ;First time execution + 118 | 1 FPMain.asm 115 | Code | 11 | | 2 | 00/6065 : A9 00 | lda #$00 ; Target the first time entry point + 119 | 1 FPMain.asm 116 | Code | 11 | | 3 | 00/6067 : 8D 03 61 | sta LowPC_reg ; First time set init value of PC, just for the next execution + 120 | 1 FPMain.asm 117 | Comment | 11 | | 0 | 00/606A | * The program begin to PC preset to $0500 * + 121 | 1 FPMain.asm 118 | Comment | 11 | | 0 | 00/606A | * + 122 | 1 FPMain.asm 119 | Comment | 11 | | 0 | 00/606A | ** Execute ** + 123 | 1 FPMain.asm 120 | Code | 11 | | 3 | 00/606A : 20 D7 60 | jsr {ozunid_9} + 124 | 1 FPMain.asm 121 | Data | 11 | | 1 | 00/606D : 04 | dfb {4} + 125 | 1 FPMain.asm 122 | Data | 11 | | 2 | 00/606E : F1 60 | dw {ozunid_14} + 126 | 1 FPMain.asm 123 | Comment | 11 | | 0 | 00/6070 | ** Read ** + 127 | 1 FPMain.asm 124 | Code | 11 | | 3 | 00/6070 : 20 D7 60 | READ jsr {ozunid_9} + 128 | 1 FPMain.asm 125 | Data | 11 | | 1 | 00/6073 : 00 | dfb {0} + 129 | 1 FPMain.asm 126 | Data | 11 | | 2 | 00/6074 : DA 60 | dw {ozunid_10} + 130 | 1 FPMain.asm 127 | Code | 11 | | 2 | 00/6076 : B0 9D | bcs {ozunid_1} + 131 | 1 FPMain.asm 128 | Empty | 11 | | 0 | 00/6078 | + 132 | 1 FPMain.asm 129 | Comment | 11 | | 0 | 00/6078 | **** Store Output results in //c **** + 133 | 1 FPMain.asm 130 | Empty | 11 | | 0 | 00/6078 | + 134 | 1 FPMain.asm 131 | Comment | 11 | | 0 | 00/6078 | * First time execute * + 135 | 1 FPMain.asm 132 | Code | 11 | | 3 | 00/6078 : AD E2 60 | lda UNIAcc_reg + 136 | 1 FPMain.asm 133 | Code | 11 | | 3 | 00/607B : 8D 00 70 | sta {$7000} + 137 | 1 FPMain.asm 134 | Code | 11 | | 3 | 00/607E : AD E3 60 | lda UNIX_reg + 138 | 1 FPMain.asm 135 | Code | 11 | | 3 | 00/6081 : 8D 01 70 | sta {$7000}+1 ; Store the result + 139 | 1 FPMain.asm 136 | Code | 11 | | 3 | 00/6084 : AD E4 60 | lda UNIY_reg + 140 | 1 FPMain.asm 137 | Code | 11 | | 3 | 00/6087 : 8D 02 70 | sta {$7000}+2 + 141 | 1 FPMain.asm 138 | Empty | 11 | | 0 | 00/608A | + 142 | 1 FPMain.asm 139 | Comment | 11 | | 0 | 00/608A | ** Second time execute ** + 143 | 1 FPMain.asm 140 | Code | 11 | | 2 | 00/608A : A9 3C | lda #$3C ; Target the secont time entry point + 144 | 1 FPMain.asm 141 | Code | 11 | | 3 | 00/608C : 8D 03 61 | sta LowPC_reg ; Second time set new value of PC + 145 | 1 FPMain.asm 142 | Comment | 11 | | 0 | 00/608F | ** Execute ** + 146 | 1 FPMain.asm 143 | Code | 11 | | 3 | 00/608F : 20 D7 60 | jsr {ozunid_9} + 147 | 1 FPMain.asm 144 | Data | 11 | | 1 | 00/6092 : 04 | dfb {4} + 148 | 1 FPMain.asm 145 | Data | 11 | | 2 | 00/6093 : F1 60 | dw {ozunid_14} + 149 | 1 FPMain.asm 146 | Comment | 11 | | 0 | 00/6095 | ** Read ** + 150 | 1 FPMain.asm 147 | Code | 11 | | 3 | 00/6095 : 20 D7 60 | jsr {ozunid_9} + 151 | 1 FPMain.asm 148 | Data | 11 | | 1 | 00/6098 : 00 | dfb {0} + 152 | 1 FPMain.asm 149 | Data | 11 | | 2 | 00/6099 : DA 60 | dw {ozunid_10} + 153 | 1 FPMain.asm 150 | Comment | 11 | | 0 | 00/609B | * bcs Error + 154 | 1 FPMain.asm 151 | Empty | 11 | | 0 | 00/609B | + 155 | 1 FPMain.asm 152 | Comment | 11 | | 0 | 00/609B | * Second time execute only to read the latest Byte of FP1* + 156 | 1 FPMain.asm 153 | Code | 11 | | 3 | 00/609B : AD E2 60 | lda UNIAcc_reg + 157 | 1 FPMain.asm 154 | Code | 11 | | 3 | 00/609E : 8D 03 70 | sta {$7000}+3 + 158 | 1 FPMain.asm 155 | Comment | 11 | | 0 | 00/60A1 | * + 159 | 1 FPMain.asm 156 | Code | 11 | | 1 | 00/60A1 : 60 | rts + 160 | 1 FPMain.asm 157 | Empty | 11 | | 0 | 00/60A2 | + 161 | 1 FPMain.asm 158 | Comment | 11 | | 0 | 00/60A2 | ****************************************************** + 162 | 1 FPMain.asm 159 | Empty | 11 | | 0 | 00/60A2 | ozunid_4 + 163 | 1 FPMain.asm 159 | Equivalence | 11 | | 0 | 00/60A2 | FindPC equ ozunid_4 + 164 | 1 FPMain.asm 160 | Comment | 11 | | 0 | 00/60A2 | * + 165 | 1 FPMain.asm 161 | Comment | 11 | | 0 | 00/60A2 | * Search slot 7 to slot 1 looking for signature bytes + 166 | 1 FPMain.asm 162 | Comment | 11 | | 0 | 00/60A2 | * + 167 | 1 FPMain.asm 163 | Code | 11 | | 2 | 00/60A2 : A2 07 | ldx #7 ;Do for seven slots + 168 | 1 FPMain.asm 164 | Code | 11 | | 2 | 00/60A4 : A9 C7 | lda #$C7 + 169 | 1 FPMain.asm 165 | Code | 11 | | 2 | 00/60A6 : 85 07 | sta {$0007} + 170 | 1 FPMain.asm 166 | Code | 11 | | 2 | 00/60A8 : A9 00 | lda #$00 + 171 | 1 FPMain.asm 167 | Code | 11 | | 2 | 00/60AA : 85 06 | sta {$0006} + 172 | 1 FPMain.asm 168 | Comment | 11 | | 0 | 00/60AC | * + 173 | 1 FPMain.asm 169 | Empty | 11 | | 0 | 00/60AC | ozunid_5 + 174 | 1 FPMain.asm 169 | Equivalence | 11 | | 0 | 00/60AC | newslot equ ozunid_5 + 175 | 1 FPMain.asm 170 | Code | 11 | | 2 | 00/60AC : A0 07 | ldy #7 + 176 | 1 FPMain.asm 171 | Comment | 11 | | 0 | 00/60AE | * + 177 | 1 FPMain.asm 172 | Empty | 11 | | 0 | 00/60AE | ozunid_6 + 178 | 1 FPMain.asm 172 | Equivalence | 11 | | 0 | 00/60AE | again equ ozunid_6 + 179 | 1 FPMain.asm 173 | Code | 11 | | 2 | 00/60AE : B1 06 | lda ({$0006}),y + 180 | 1 FPMain.asm 174 | Code | 11 | | 3 | 00/60B0 : D9 CF 60 | cmp sigtab,y ;One for byte signature + 181 | 1 FPMain.asm 175 | Code | 11 | | 2 | 00/60B3 : F0 07 | beq {ozunid_7} ;Found one signature byte + 182 | 1 FPMain.asm 176 | Code | 11 | | 2 | 00/60B5 : C6 07 | dec {$0007} + 183 | 1 FPMain.asm 177 | Code | 11 | | 1 | 00/60B7 : CA | dex + 184 | 1 FPMain.asm 178 | Code | 11 | | 2 | 00/60B8 : D0 F2 | bne {ozunid_5} + 185 | 1 FPMain.asm 179 | Comment | 11 | | 0 | 00/60BA | * + 186 | 1 FPMain.asm 180 | Comment | 11 | | 0 | 00/60BA | * if we get here, no PC find + 187 | 1 FPMain.asm 181 | Code | 11 | | 1 | 00/60BA : 38 | sec + 188 | 1 FPMain.asm 182 | Code | 11 | | 1 | 00/60BB : 60 | rts + 189 | 1 FPMain.asm 183 | Comment | 11 | | 0 | 00/60BC | * + 190 | 1 FPMain.asm 184 | Comment | 11 | | 0 | 00/60BC | * if we get here, no byte find on PC + 191 | 1 FPMain.asm 185 | Empty | 11 | | 0 | 00/60BC | ozunid_7 + 192 | 1 FPMain.asm 185 | Equivalence | 11 | | 0 | 00/60BC | maybe equ ozunid_7 + 193 | 1 FPMain.asm 186 | Code | 11 | | 1 | 00/60BC : 88 | dey + 194 | 1 FPMain.asm 187 | Code | 11 | | 1 | 00/60BD : 88 | dey ;if N=1 then all sig bytes OK + 195 | 1 FPMain.asm 188 | Code | 11 | | 2 | 00/60BE : 10 EE | bpl {ozunid_6} + 196 | 1 FPMain.asm 189 | Comment | 11 | | 0 | 00/60C0 | * Found PC interface. Set up call address. + 197 | 1 FPMain.asm 190 | Comment | 11 | | 0 | 00/60C0 | * we already have high byte ($CN), we need low byte + 198 | 1 FPMain.asm 191 | Comment | 11 | | 0 | 00/60C0 | * + 199 | 1 FPMain.asm 192 | Empty | 11 | | 0 | 00/60C0 | ozunid_8 + 200 | 1 FPMain.asm 192 | Equivalence | 11 | | 0 | 00/60C0 | foundPC equ ozunid_8 + 201 | 1 FPMain.asm 193 | Code | 11 | | 2 | 00/60C0 : A9 FF | lda #$FF + 202 | 1 FPMain.asm 194 | Code | 11 | | 2 | 00/60C2 : 85 06 | sta {$0006} + 203 | 1 FPMain.asm 195 | Code | 11 | | 2 | 00/60C4 : A0 00 | ldy #0 ;For indirect load + 204 | 1 FPMain.asm 196 | Code | 11 | | 2 | 00/60C6 : B1 06 | lda ({$0006}),y ;Get the byte + 205 | 1 FPMain.asm 197 | Comment | 11 | | 0 | 00/60C8 | * + 206 | 1 FPMain.asm 198 | Comment | 11 | | 0 | 00/60C8 | * Now the Acc has the low oreder ProDOS entry point. + 207 | 1 FPMain.asm 199 | Comment | 11 | | 0 | 00/60C8 | * The PC entry is three locations past this ... + 208 | 1 FPMain.asm 200 | Comment | 11 | | 0 | 00/60C8 | * + 209 | 1 FPMain.asm 201 | Code | 11 | | 1 | 00/60C8 : 18 | clc + 210 | 1 FPMain.asm 202 | Code | 11 | | 2 | 00/60C9 : 69 03 | adc #3 + 211 | 1 FPMain.asm 203 | Code | 11 | | 2 | 00/60CB : 85 06 | sta {$0006} + 212 | 1 FPMain.asm 204 | Comment | 11 | | 0 | 00/60CD | * + 213 | 1 FPMain.asm 205 | Comment | 11 | | 0 | 00/60CD | * Now ZPTempL has PC entry point. + 214 | 1 FPMain.asm 206 | Comment | 11 | | 0 | 00/60CD | * Return with carry clear. + 215 | 1 FPMain.asm 207 | Comment | 11 | | 0 | 00/60CD | * + 216 | 1 FPMain.asm 208 | Code | 11 | | 1 | 00/60CD : 18 | clc + 217 | 1 FPMain.asm 209 | Code | 11 | | 1 | 00/60CE : 60 | rts + 218 | 1 FPMain.asm 210 | Comment | 11 | | 0 | 00/60CF | *********************************************************** + 219 | 1 FPMain.asm 211 | Comment | 11 | | 0 | 00/60CF | * + 220 | 1 FPMain.asm 212 | Comment | 11 | | 0 | 00/60CF | * There are the PC signature bytes in their relative order. + 221 | 1 FPMain.asm 213 | Comment | 11 | | 0 | 00/60CF | * The $FF bytes are filler bytes and are not compared. + 222 | 1 FPMain.asm 214 | Comment | 11 | | 0 | 00/60CF | * + 223 | 1 FPMain.asm 215 | Data | 11 | | 4 | 00/60CF : FF 20 FF 00 | sigtab dfb $FF,$20,$FF,$00 + 224 | 1 FPMain.asm 216 | Data | 11 | | 4 | 00/60D3 : FF 03 FF 00 | dfb $FF,$03,$FF,$00 + 225 | 1 FPMain.asm 217 | Comment | 11 | | 0 | 00/60D7 | * + 226 | 1 FPMain.asm 218 | Empty | 11 | | 0 | 00/60D7 | ozunid_9 + 227 | 1 FPMain.asm 218 | Equivalence | 11 | | 0 | 00/60D7 | Dispatch equ ozunid_9 + 228 | 1 FPMain.asm 219 | Code | 11 | | 3 | 00/60D7 : 6C 06 00 | jmp ({$0006}) ;Simulate an indirect JSR to PC + 229 | 1 FPMain.asm 220 | Comment | 11 | | 0 | 00/60DA | * + 230 | 1 FPMain.asm 221 | Comment | 11 | | 0 | 00/60DA | *** Status Parameter Set for UNI *** + 231 | 1 FPMain.asm 222 | Empty | 11 | | 0 | 00/60DA | ozunid_10 + 232 | 1 FPMain.asm 222 | Equivalence | 11 | | 0 | 00/60DA | DParms equ ozunid_10 + 233 | 1 FPMain.asm 223 | Data | 11 | | 1 | 00/60DA : 03 | DPParmsCt dfb 3 ;Status calls have three parameters + 234 | 1 FPMain.asm 224 | Data | 11 | | 1 | 00/60DB : 01 | DPUnit dfb 1 + 235 | 1 FPMain.asm 225 | Data | 11 | | 2 | 00/60DC : DF 60 | DPBuffer dw {ozunid_11} + 236 | 1 FPMain.asm 226 | Data | 11 | | 1 | 00/60DE : 05 | DPStatCode dfb {5} + 237 | 1 FPMain.asm 227 | Comment | 11 | | 0 | 00/60DF | * + 238 | 1 FPMain.asm 228 | Comment | 11 | | 0 | 00/60DF | * + 239 | 1 FPMain.asm 229 | Comment | 11 | | 0 | 00/60DF | * + 240 | 1 FPMain.asm 230 | Comment | 11 | | 0 | 00/60DF | *** Status List UNI *** + 241 | 1 FPMain.asm 231 | Empty | 11 | | 0 | 00/60DF | ozunid_11 + 242 | 1 FPMain.asm 231 | Equivalence | 11 | | 0 | 00/60DF | UNI equ ozunid_11 + 243 | 1 FPMain.asm 232 | Data | 11 | | 1 | 00/60DF : 00 | dfb 0 + 244 | 1 FPMain.asm 233 | Data | 11 | | 1 | 00/60E0 : 00 | UNIError dfb 0 + 245 | 1 FPMain.asm 234 | Data | 11 | | 1 | 00/60E1 : 00 | UNIRetries dfb 0 + 246 | 1 FPMain.asm 235 | Data | 11 | | 1 | 00/60E2 : 00 | UNIAcc_reg dfb 0 + 247 | 1 FPMain.asm 236 | Data | 11 | | 1 | 00/60E3 : 00 | UNIX_reg dfb 0 + 248 | 1 FPMain.asm 237 | Data | 11 | | 1 | 00/60E4 : 00 | UNIY_reg dfb 0 + 249 | 1 FPMain.asm 238 | Data | 11 | | 1 | 00/60E5 : 00 | UNIP_val dfb 0 + 250 | 1 FPMain.asm 239 | Data | 11 | | 1 | 00/60E6 : 00 | HHH dfb 0 + 251 | 1 FPMain.asm 240 | Comment | 11 | | 0 | 00/60E7 | * + 252 | 1 FPMain.asm 241 | Comment | 11 | | 0 | 00/60E7 | *** Set Address *** + 253 | 1 FPMain.asm 242 | Empty | 11 | | 0 | 00/60E7 | ozunid_12 + 254 | 1 FPMain.asm 242 | Equivalence | 11 | | 0 | 00/60E7 | SET_ADD equ ozunid_12 + 255 | 1 FPMain.asm 243 | Data | 11 | | 1 | 00/60E7 : 03 | dfb 3 + 256 | 1 FPMain.asm 244 | Data | 11 | | 1 | 00/60E8 : 01 | dfb 1 + 257 | 1 FPMain.asm 245 | Data | 11 | | 2 | 00/60E9 : 05 61 | dw {ozunid_18} + 258 | 1 FPMain.asm 246 | Data | 11 | | 1 | 00/60EB : 06 | dfb {6} + 259 | 1 FPMain.asm 247 | Comment | 11 | | 0 | 00/60EC | * + 260 | 1 FPMain.asm 248 | Comment | 11 | | 0 | 00/60EC | *** Download *** + 261 | 1 FPMain.asm 249 | Empty | 11 | | 0 | 00/60EC | ozunid_13 + 262 | 1 FPMain.asm 249 | Equivalence | 11 | | 0 | 00/60EC | DOWNLOAD equ ozunid_13 + 263 | 1 FPMain.asm 250 | Data | 11 | | 1 | 00/60EC : 03 | dfb 3 + 264 | 1 FPMain.asm 251 | Data | 11 | | 1 | 00/60ED : 01 | dfb 1 + 265 | 1 FPMain.asm 252 | Data | 11 | | 2 | 00/60EE : 09 61 | dw {ozunid_19} + 266 | 1 FPMain.asm 253 | Data | 11 | | 1 | 00/60F0 : 07 | dfb {7} + 267 | 1 FPMain.asm 254 | Comment | 11 | | 0 | 00/60F1 | * + 268 | 1 FPMain.asm 255 | Comment | 11 | | 0 | 00/60F1 | *** Execute *** + 269 | 1 FPMain.asm 256 | Empty | 11 | | 0 | 00/60F1 | ozunid_14 + 270 | 1 FPMain.asm 256 | Equivalence | 11 | | 0 | 00/60F1 | EXE equ ozunid_14 + 271 | 1 FPMain.asm 257 | Data | 11 | | 1 | 00/60F1 : 03 | dfb 3 + 272 | 1 FPMain.asm 258 | Data | 11 | | 1 | 00/60F2 : 01 | dfb 1 + 273 | 1 FPMain.asm 259 | Data | 11 | | 2 | 00/60F3 : FD 60 | dw {ozunid_17} + 274 | 1 FPMain.asm 260 | Data | 11 | | 1 | 00/60F5 : 05 | dfb {5} + 275 | 1 FPMain.asm 261 | Comment | 11 | | 0 | 00/60F6 | *** Eject *** + 276 | 1 FPMain.asm 262 | Empty | 11 | | 0 | 00/60F6 | ozunid_15 + 277 | 1 FPMain.asm 262 | Equivalence | 11 | | 0 | 00/60F6 | E_JECT equ ozunid_15 + 278 | 1 FPMain.asm 263 | Data | 11 | | 1 | 00/60F6 : 03 | dfb 3 + 279 | 1 FPMain.asm 264 | Data | 11 | | 1 | 00/60F7 : 01 | dfb 1 + 280 | 1 FPMain.asm 265 | Data | 11 | | 2 | 00/60F8 : FB 60 | dw {ozunid_16} + 281 | 1 FPMain.asm 266 | Data | 11 | | 1 | 00/60FA : 04 | dfb {4} + 282 | 1 FPMain.asm 267 | Comment | 11 | | 0 | 00/60FB | * + 283 | 1 FPMain.asm 268 | Comment | 11 | | 0 | 00/60FB | ******** CONTROL LISTS ******** + 284 | 1 FPMain.asm 269 | Comment | 11 | | 0 | 00/60FB | * + 285 | 1 FPMain.asm 270 | Comment | 11 | | 0 | 00/60FB | * + 286 | 1 FPMain.asm 271 | Comment | 11 | | 0 | 00/60FB | *** Eject *** + 287 | 1 FPMain.asm 272 | Empty | 11 | | 0 | 00/60FB | ozunid_16 + 288 | 1 FPMain.asm 272 | Equivalence | 11 | | 0 | 00/60FB | CNTL_LIST1 equ ozunid_16 + 289 | 1 FPMain.asm 273 | Data | 11 | | 2 | 00/60FB : 00 00 | dw $0000 + 290 | 1 FPMain.asm 274 | Comment | 11 | | 0 | 00/60FD | * + 291 | 1 FPMain.asm 275 | Comment | 11 | | 0 | 00/60FD | *** Execute *** + 292 | 1 FPMain.asm 276 | Empty | 11 | | 0 | 00/60FD | ozunid_17 + 293 | 1 FPMain.asm 276 | Equivalence | 11 | | 0 | 00/60FD | CNTL_LIST2 equ ozunid_17 + 294 | 1 FPMain.asm 277 | Data | 11 | | 1 | 00/60FD : 06 | Clow_byte dfb $06 + 295 | 1 FPMain.asm 278 | Data | 11 | | 1 | 00/60FE : 00 | Chigh_byte dfb $00 + 296 | 1 FPMain.asm 279 | Data | 11 | | 1 | 00/60FF : 00 | AccValue dfb $00 ; Init Value Unidisk Accumulator Register + 297 | 1 FPMain.asm 280 | Data | 11 | | 1 | 00/6100 : 00 | X_reg dfb $00 ; Init Value Unidisk X Register + 298 | 1 FPMain.asm 281 | Data | 11 | | 1 | 00/6101 : 00 | Y_reg dfb $00 ; Init Value Unidisk Y Register + 299 | 1 FPMain.asm 282 | Data | 11 | | 1 | 00/6102 : 00 | ProStatus dfb $00 ; Init Value Unidisk Status Register + 300 | 1 FPMain.asm 283 | Data | 11 | | 1 | 00/6103 : 00 | LowPC_reg dfb $00 ; Init Value Unidisk Program Counter $0500 at eny dowload + 301 | 1 FPMain.asm 284 | Data | 11 | | 1 | 00/6104 : 05 | HighPC_reg dfb $05 ; $05 first execution, $3C second execution + 302 | 1 FPMain.asm 285 | Comment | 11 | | 0 | 00/6105 | * + 303 | 1 FPMain.asm 286 | Comment | 11 | | 0 | 00/6105 | *** Set Address *** + 304 | 1 FPMain.asm 287 | Empty | 11 | | 0 | 00/6105 | ozunid_18 + 305 | 1 FPMain.asm 287 | Equivalence | 11 | | 0 | 00/6105 | CNTL_LIST3 equ ozunid_18 + 306 | 1 FPMain.asm 288 | Data | 11 | | 1 | 00/6105 : 02 | CountL_byte dfb $02 + 307 | 1 FPMain.asm 289 | Data | 11 | | 1 | 00/6106 : 00 | CountH_byte dfb $00 + 308 | 1 FPMain.asm 290 | Data | 11 | | 1 | 00/6107 : 00 | LByte_Addr dfb $00 ; ORG of Unidisk program, set begin program address $0500 + 309 | 1 FPMain.asm 291 | Data | 11 | | 1 | 00/6108 : 05 | HByte_Addr dfb $05 + 310 | 1 FPMain.asm 292 | Comment | 11 | | 0 | 00/6109 | * + 311 | 1 FPMain.asm 293 | Comment | 11 | | 0 | 00/6109 | *** Download *** + 312 | 1 FPMain.asm 294 | Empty | 11 | | 0 | 00/6109 | ozunid_19 + 313 | 1 FPMain.asm 294 | Equivalence | 11 | | 0 | 00/6109 | CNTL_LIST4 equ ozunid_19 + 314 | 1 FPMain.asm 295 | Data | 11 | | 1 | 00/6109 : 34 | LenghtL_byte dfb $34 ;<----- Lenght of Unidisk program Lo - Byte 312 byte + 315 | 1 FPMain.asm 296 | Data | 11 | | 1 | 00/610A : 01 | LenghtH_byte dfb $01 ;<----- Lenght of Unidisk program Hi Byte + 316 | 1 FPMain.asm 297 | Comment | 11 | | 0 | 00/610B | * + 317 | 1 FPMain.asm 298 | Comment | 11 | | 0 | 00/610B | **************** Start UNIDISK Program **************** + 318 | 1 FPMain.asm 299 | Comment | 11 | | 0 | 00/610B | * + 319 | 1 FPMain.asm 300 | Directive | 11 | | 0 | 00/610B | org $0500 ; Start Unidisk program address + 320 | 1 FPMain.asm 301 | Empty | 11 | | 0 | 00/0500 | + 321 | 1 FPMain.asm 302 | Equivalence | 11 | | 0 | 00/0500 | SIGN EQU $C0 ;$EB ; $F3 + 322 | 1 FPMain.asm 303 | Empty | 11 | | 0 | 00/0500 | + 323 | 1 FPMain.asm 304 | Comment | 11 | | 0 | 00/0500 | ** FP2 4 Bytes ** + 324 | 1 FPMain.asm 305 | Equivalence | 11 | | 0 | 00/0500 | X2 EQU $C1 ;$EC ; $F4 + 325 | 1 FPMain.asm 306 | Equivalence | 11 | | 0 | 00/0500 | M2 EQU $C2 ;$ED ; $F5 - $F7 + 326 | 1 FPMain.asm 307 | Empty | 11 | | 0 | 00/0500 | + 327 | 1 FPMain.asm 308 | Comment | 11 | | 0 | 00/0500 | ** FP1 4 Bytes + E extension ** + 328 | 1 FPMain.asm 309 | Equivalence | 11 | | 0 | 00/0500 | X1 EQU $C5 ;$FA ; $F8 + 329 | 1 FPMain.asm 310 | Equivalence | 11 | | 0 | 00/0500 | M1 EQU $C6 ;$FB ; $F9 - $FB + 330 | 1 FPMain.asm 311 | Equivalence | 11 | | 0 | 00/0500 | E EQU $C9 ;$FE ; $FC + 331 | 1 FPMain.asm 312 | Empty | 11 | | 0 | 00/0500 | + 332 | 1 FPMain.asm 313 | Equivalence | 11 | | 0 | 00/0500 | OVLOC EQU $C10 ;$3F5 ;Overflow routine is not implemented at now) + 333 | 1 FPMain.asm 314 | Empty | 11 | | 0 | 00/0500 | + 334 | 1 FPMain.asm 315 | Comment | 11 | | 0 | 00/0500 | * + 335 | 1 FPMain.asm 316 | Comment | 11 | | 0 | 00/0500 | ** Main program ** + 336 | 1 FPMain.asm 317 | Comment | 11 | | 0 | 00/0500 | * + 337 | 1 FPMain.asm 318 | Comment | 11 | | 0 | 00/0500 | ** Input data to Zero Page ** + 338 | 1 FPMain.asm 319 | Empty | 11 | | 0 | 00/0500 | + 339 | 1 FPMain.asm 320 | Comment | 11 | | 0 | 00/0500 | ** FP1 ** + 340 | 1 FPMain.asm 321 | Code | 11 | | 3 | 00/0500 : AD 2D 06 | lda FP1 + 341 | 1 FPMain.asm 322 | Code | 11 | | 2 | 00/0503 : 85 C5 | sta {$C5} + 342 | 1 FPMain.asm 323 | Empty | 11 | | 0 | 00/0505 | + 343 | 1 FPMain.asm 324 | Code | 11 | | 3 | 00/0505 : AD 2E 06 | lda FP1+1 + 344 | 1 FPMain.asm 325 | Code | 11 | | 2 | 00/0508 : 85 C6 | sta {$C6} + 345 | 1 FPMain.asm 326 | Code | 11 | | 3 | 00/050A : AD 2F 06 | lda FP1+2 + 346 | 1 FPMain.asm 327 | Code | 11 | | 2 | 00/050D : 85 C7 | sta {$C6}+1 + 347 | 1 FPMain.asm 328 | Code | 11 | | 3 | 00/050F : AD 30 06 | lda FP1+3 + 348 | 1 FPMain.asm 329 | Code | 11 | | 2 | 00/0512 : 85 C8 | sta {$C6}+2 + 349 | 1 FPMain.asm 330 | Empty | 11 | | 0 | 00/0514 | + 350 | 1 FPMain.asm 331 | Comment | 11 | | 0 | 00/0514 | ** FP2 ** + 351 | 1 FPMain.asm 332 | Code | 11 | | 3 | 00/0514 : AD 31 06 | lda FP2 + 352 | 1 FPMain.asm 333 | Code | 11 | | 2 | 00/0517 : 85 C1 | sta {$C1} + 353 | 1 FPMain.asm 334 | Empty | 11 | | 0 | 00/0519 | + 354 | 1 FPMain.asm 335 | Code | 11 | | 3 | 00/0519 : AD 32 06 | lda FP2+1 + 355 | 1 FPMain.asm 336 | Code | 11 | | 2 | 00/051C : 85 C2 | sta {$C2} + 356 | 1 FPMain.asm 337 | Code | 11 | | 3 | 00/051E : AD 33 06 | lda FP2+2 + 357 | 1 FPMain.asm 338 | Code | 11 | | 2 | 00/0521 : 85 C3 | sta {$C2}+1 + 358 | 1 FPMain.asm 339 | Code | 11 | | 3 | 00/0523 : AD 34 06 | lda FP2+3 + 359 | 1 FPMain.asm 340 | Code | 11 | | 2 | 00/0526 : 85 C4 | sta {$C2}+2 + 360 | 1 FPMain.asm 341 | Empty | 11 | | 0 | 00/0528 | + 361 | 1 FPMain.asm 342 | Comment | 11 | | 0 | 00/0528 | ************************** Target Function *********************** + 362 | 1 FPMain.asm 343 | Comment | 11 | | 0 | 00/0528 | * Y=N1*N2 * + 363 | 1 FPMain.asm 344 | Comment | 11 | | 0 | 00/0528 | ****************************************************************** + 364 | 1 FPMain.asm 345 | Comment | 11 | | 0 | 00/0528 | * + 365 | 1 FPMain.asm 346 | Comment | 11 | | 0 | 00/0528 | ** Simple MUL ** + 366 | 1 FPMain.asm 347 | Code | 11 | | 3 | 00/0528 : 20 9C 05 | jsr FMUL ;FMUL ; Call FP routine + 367 | 1 FPMain.asm 348 | Empty | 11 | | 0 | 00/052B | + 368 | 1 FPMain.asm 349 | Comment | 11 | | 0 | 00/052B | *** Output Data result FP1 to Unidisk registers First Time first 3 Byte out *** + 369 | 1 FPMain.asm 350 | Code | 11 | | 2 | 00/052B : A5 C5 | lda {$C5} + 370 | 1 FPMain.asm 351 | Code | 11 | | 2 | 00/052D : A6 C6 | ldx {$C6} + 371 | 1 FPMain.asm 352 | Code | 11 | | 2 | 00/052F : A4 C7 | ldy {$C6}+1 + 372 | 1 FPMain.asm 353 | Empty | 11 | | 0 | 00/0531 | + 373 | 1 FPMain.asm 354 | Code | 11 | | 1 | 00/0531 : 60 | rts + 374 | 1 FPMain.asm 355 | Comment | 11 | | 0 | 00/0532 | *** Output Data result FP1 to Unidisk registers Second Time latest 1 Byte out *** + 375 | 1 FPMain.asm 356 | Code | 11 | | 2 | 00/0532 : A5 C8 | SECOND lda {$C6}+2 ; Entry point by Program Counter set + 376 | 1 FPMain.asm 357 | Empty | 11 | | 0 | 00/0534 | + 377 | 1 FPMain.asm 358 | Code | 11 | | 1 | 00/0534 : 60 | rts + 378 | 1 FPMain.asm 359 | Comment | 11 | | 0 | 00/0535 | *************************************************** + 379 | 1 FPMain.asm 360 | Comment | 11 | | 0 | 00/0535 | * + 380 | 1 FPMain.asm 361 | Comment | 11 | | 0 | 00/0535 | ***************** FP Routine ***************** + 381 | 1 FPMain.asm 362 | Comment | 11 | | 0 | 00/0535 | * + 382 | 1 FPMain.asm 363 | Comment | 11 | | 0 | 00/0535 | *********************** + 383 | 1 FPMain.asm 364 | Comment | 11 | | 0 | 00/0535 | * * + 384 | 1 FPMain.asm 365 | Comment | 11 | | 0 | 00/0535 | * APPLE-II FLOATING * + 385 | 1 FPMain.asm 366 | Comment | 11 | | 0 | 00/0535 | * POINT ROUTINES * + 386 | 1 FPMain.asm 367 | Comment | 11 | | 0 | 00/0535 | * * + 387 | 1 FPMain.asm 368 | Comment | 11 | | 0 | 00/0535 | * COPYRIGHT 1977 BY * + 388 | 1 FPMain.asm 369 | Comment | 11 | | 0 | 00/0535 | * APPLE COMPUTER INC. * + 389 | 1 FPMain.asm 370 | Comment | 11 | | 0 | 00/0535 | * * + 390 | 1 FPMain.asm 371 | Comment | 11 | | 0 | 00/0535 | * ALL RIGHTS RESERVED * + 391 | 1 FPMain.asm 372 | Comment | 11 | | 0 | 00/0535 | * * + 392 | 1 FPMain.asm 373 | Comment | 11 | | 0 | 00/0535 | * S. WOZNIAK * + 393 | 1 FPMain.asm 374 | Comment | 11 | | 0 | 00/0535 | * * + 394 | 1 FPMain.asm 375 | Comment | 11 | | 0 | 00/0535 | *********************** + 395 | 1 FPMain.asm 376 | Comment | 11 | | 0 | 00/0535 | * TITLE "FLOATING POINT ROUTINES for Unidisk memory" + 396 | 1 FPMain.asm 377 | Comment | 11 | | 0 | 00/0535 | * + 397 | 1 FPMain.asm 378 | Empty | 11 | | 0 | 00/0535 | + 398 | 1 FPMain.asm 379 | Code | 11 | | 1 | 00/0535 : 18 | ADD CLC ;CLEAR CARRY + 399 | 1 FPMain.asm 380 | Code | 11 | | 2 | 00/0536 : A2 02 | LDX #$2 ;INDEX FOR 3-BYTE ADD. + 400 | 1 FPMain.asm 381 | Code | 11 | | 2 | 00/0538 : B5 C6 | ADD1 LDA {$C6},X + 401 | 1 FPMain.asm 382 | Code | 11 | | 2 | 00/053A : 75 C2 | ADC {$C2},X ;ADD A BYTE OF MANT2 TO MANT1 + 402 | 1 FPMain.asm 383 | Code | 11 | | 2 | 00/053C : 95 C6 | STA {$C6},X + 403 | 1 FPMain.asm 384 | Code | 11 | | 1 | 00/053E : CA | DEX ;INDEX TO NEXT MORE SIGNIF. BYTE. + 404 | 1 FPMain.asm 385 | Code | 11 | | 2 | 00/053F : 10 F7 | BPL ADD1 ;LOOP UNTIL DONE. + 405 | 1 FPMain.asm 386 | Code | 11 | | 1 | 00/0541 : 60 | RTS ;RETURN + 406 | 1 FPMain.asm 387 | Code | 11 | | 2 | 00/0542 : 06 C0 | MD1 ASL {$C0} ;CLEAR LSB OF SIGN. + 407 | 1 FPMain.asm 388 | Code | 11 | | 3 | 00/0544 : 20 47 05 | JSR ABSWAP ;ABS VAL OF M1, THEN SWAP WITH M2 + 408 | 1 FPMain.asm 389 | Code | 11 | | 2 | 00/0547 : 24 C6 | ABSWAP BIT {$C6} ;MANT1 NEGATIVE? + 409 | 1 FPMain.asm 390 | Code | 11 | | 2 | 00/0549 : 10 05 | BPL ABSWAP1 ;NO, SWAP WITH MANT2 AND RETURN. + 410 | 1 FPMain.asm 391 | Code | 11 | | 3 | 00/054B : 20 B4 05 | JSR FCOMPL ;YES, COMPLEMENT IT. + 411 | 1 FPMain.asm 392 | Code | 11 | | 2 | 00/054E : E6 C0 | INC {$C0} ;INCR SIGN, COMPLEMENTING LSB. + 412 | 1 FPMain.asm 393 | Code | 11 | | 1 | 00/0550 : 38 | ABSWAP1 SEC ;SET CARRY FOR RETURN TO MUL/DIV. + 413 | 1 FPMain.asm 394 | Code | 11 | | 2 | 00/0551 : A2 04 | SWAP LDX #$4 ;INDEX FOR 4 BYTE SWAP. + 414 | 1 FPMain.asm 395 | Code | 11 | | 2 | 00/0553 : 94 C8 | SWAP1 STY {$C9}-1,X + 415 | 1 FPMain.asm 396 | Code | 11 | | 2 | 00/0555 : B5 C4 | LDA {$C5}-1,X ;SWAP A BYTE OF EXP/MANT1 WITH + 416 | 1 FPMain.asm 397 | Code | 11 | | 2 | 00/0557 : B4 C0 | LDY {$C1}-1,X ;EXP/MANT2 AND LEAVE A COPY OF + 417 | 1 FPMain.asm 398 | Code | 11 | | 2 | 00/0559 : 94 C4 | STY {$C5}-1,X ;MANT1 IN E (3 BYTES). E+3 USED + 418 | 1 FPMain.asm 399 | Code | 11 | | 2 | 00/055B : 95 C0 | STA {$C1}-1,X + 419 | 1 FPMain.asm 400 | Code | 11 | | 1 | 00/055D : CA | DEX ;ADVANCE INDEX TO NEXT BYTE + 420 | 1 FPMain.asm 401 | Code | 11 | | 2 | 00/055E : D0 F3 | BNE SWAP1 ;LOOP UNTIL DONE. + 421 | 1 FPMain.asm 402 | Code | 11 | | 1 | 00/0560 : 60 | RTS ;RETURN + 422 | 1 FPMain.asm 403 | Code | 11 | | 2 | 00/0561 : A9 8E | FLOAT LDA #$8E ;INIT EXP1 TO 14, <--------------- int to fp + 423 | 1 FPMain.asm 404 | Code | 11 | | 2 | 00/0563 : 85 C5 | STA {$C5} ;THEN NORMALIZE TO FLOAT. + 424 | 1 FPMain.asm 405 | Code | 11 | | 2 | 00/0565 : A5 C6 | NORM1 LDA {$C6} ;HIGH-ORDER MANT1 BYTE. + 425 | 1 FPMain.asm 406 | Code | 11 | | 2 | 00/0567 : C9 C0 | CMP #$C0 ;UPPER TWO BITS UNEQUAL? + 426 | 1 FPMain.asm 407 | Code | 11 | | 2 | 00/0569 : 30 0C | BMI RTS1 ;YES, RETURN WITH MANT1 NORMALIZED + 427 | 1 FPMain.asm 408 | Code | 11 | | 2 | 00/056B : C6 C5 | DEC {$C5} ;DECREMENT EXP1. + 428 | 1 FPMain.asm 409 | Code | 11 | | 2 | 00/056D : 06 C8 | ASL {$C6}+2 + 429 | 1 FPMain.asm 410 | Code | 11 | | 2 | 00/056F : 26 C7 | ROL {$C6}+1 ;SHIFT MANT1 (3 BYTES) LEFT. + 430 | 1 FPMain.asm 411 | Code | 11 | | 2 | 00/0571 : 26 C6 | ROL {$C6} + 431 | 1 FPMain.asm 412 | Code | 11 | | 2 | 00/0573 : A5 C5 | NORM LDA {$C5} ;EXP1 ZERO? + 432 | 1 FPMain.asm 413 | Code | 11 | | 2 | 00/0575 : D0 EE | BNE NORM1 ;NO, CONTINUE NORMALIZING. + 433 | 1 FPMain.asm 414 | Code | 11 | | 1 | 00/0577 : 60 | RTS1 RTS ;RETURN. + 434 | 1 FPMain.asm 415 | Code | 11 | | 3 | 00/0578 : 20 B4 05 | FSUB JSR FCOMPL ;CMPL MANT1,CLEARS CARRY UNLESS 0 <---- sub + 435 | 1 FPMain.asm 416 | Code | 11 | | 3 | 00/057B : 20 8B 05 | SWPALGN JSR ALGNSWP ;RIGHT SHIFT MANT1 OR SWAP WITH + 436 | 1 FPMain.asm 417 | Code | 11 | | 2 | 00/057E : A5 C1 | FADD LDA {$C1} ;<------------------------------------- add + 437 | 1 FPMain.asm 418 | Code | 11 | | 2 | 00/0580 : C5 C5 | CMP {$C5} ;COMPARE EXP1 WITH EXP2. + 438 | 1 FPMain.asm 419 | Code | 11 | | 2 | 00/0582 : D0 F7 | BNE SWPALGN ;IF #,SWAP ADDENDS OR ALIGN MANTS. + 439 | 1 FPMain.asm 420 | Code | 11 | | 3 | 00/0584 : 20 35 05 | JSR ADD ;ADD ALIGNED MANTISSAS. + 440 | 1 FPMain.asm 421 | Code | 11 | | 2 | 00/0587 : 50 EA | ADDEND BVC NORM ;NO OVERFLOW, NORMALIZE RESULT. + 441 | 1 FPMain.asm 422 | Code | 11 | | 2 | 00/0589 : 70 05 | BVS RTLOG ;OV: SHIFT M1 RIGHT, CARRY INTO SIGN + 442 | 1 FPMain.asm 423 | Code | 11 | | 2 | 00/058B : 90 C4 | ALGNSWP BCC SWAP ;SWAP IF CARRY CLEAR, + 443 | 1 FPMain.asm 424 | Comment | 11 | | 0 | 00/058D | * ELSE SHIFT RIGHT ARITH. + 444 | 1 FPMain.asm 425 | Code | 11 | | 2 | 00/058D : A5 C6 | RTAR LDA {$C6} ;SIGN OF MANT1 INTO CARRY FOR + 445 | 1 FPMain.asm 426 | Code | 11 | | 1 | 00/058F : 0A | ASL ;RIGHT ARITH SHIFT. + 446 | 1 FPMain.asm 427 | Code | 11 | | 2 | 00/0590 : E6 C5 | RTLOG INC {$C5} ;INCR X1 TO ADJUST FOR RIGHT SHIFT + 447 | 1 FPMain.asm 428 | Code | 11 | | 2 | 00/0592 : F0 75 | BEQ OVFL ;EXP1 OUT OF RANGE. + 448 | 1 FPMain.asm 429 | Code | 11 | | 2 | 00/0594 : A2 FA | RTLOG1 LDX #$FA ;INDEX FOR 6:BYTE RIGHT SHIFT. + 449 | 1 FPMain.asm 430 | Code | 11 | | 2 | 00/0596 : 76 CC | ROR1 ROR {$C9}+3,X + 450 | 1 FPMain.asm 431 | Code | 11 | | 1 | 00/0598 : E8 | INX ;NEXT BYTE OF SHIFT. + 451 | 1 FPMain.asm 432 | Code | 11 | | 2 | 00/0599 : D0 FB | BNE ROR1 ;LOOP UNTIL DONE. + 452 | 1 FPMain.asm 433 | Code | 11 | | 1 | 00/059B : 60 | RTS ;RETURN. + 453 | 1 FPMain.asm 434 | Code | 11 | | 3 | 00/059C : 20 42 05 | FMUL JSR MD1 ;ABS VAL OF MANT1, MANT2 <-------------- mul + 454 | 1 FPMain.asm 435 | Code | 11 | | 2 | 00/059F : 65 C5 | ADC {$C5} ;ADD EXP1 TO EXP2 FOR PRODUCT EXP + 455 | 1 FPMain.asm 436 | Code | 11 | | 3 | 00/05A1 : 20 F2 05 | JSR MD2 ;CHECK PROD. EXP AND PREP. FOR MUL + 456 | 1 FPMain.asm 437 | Code | 11 | | 1 | 00/05A4 : 18 | CLC ;CLEAR CARRY FOR FIRST BIT. + 457 | 1 FPMain.asm 438 | Code | 11 | | 3 | 00/05A5 : 20 94 05 | MUL1 JSR RTLOG1 ;M1 AND E RIGHT (PROD AND MPLIER) + 458 | 1 FPMain.asm 439 | Code | 11 | | 2 | 00/05A8 : 90 03 | BCC MUL2 ;IF CARRY CLEAR, SKIP PARTIAL PROD + 459 | 1 FPMain.asm 440 | Code | 11 | | 3 | 00/05AA : 20 35 05 | JSR ADD ;ADD MULTIPLICAND TO PRODUCT. + 460 | 1 FPMain.asm 441 | Code | 11 | | 1 | 00/05AD : 88 | MUL2 DEY ;NEXT MUL ITERATION. + 461 | 1 FPMain.asm 442 | Code | 11 | | 2 | 00/05AE : 10 F5 | BPL MUL1 ;LOOP UNTIL DONE. + 462 | 1 FPMain.asm 443 | Code | 11 | | 2 | 00/05B0 : 46 C0 | MDEND LSR {$C0} ;TEST SIGN LSB. + 463 | 1 FPMain.asm 444 | Code | 11 | | 2 | 00/05B2 : 90 BF | NORMX BCC NORM ;IF EVEN,NORMALIZE PROD,ELSE COMP + 464 | 1 FPMain.asm 445 | Code | 11 | | 1 | 00/05B4 : 38 | FCOMPL SEC ;SET CARRY FOR SUBTRACT. <--------------- not + 465 | 1 FPMain.asm 446 | Code | 11 | | 2 | 00/05B5 : A2 03 | LDX #$3 ;INDEX FOR 3 BYTE SUBTRACT. + 466 | 1 FPMain.asm 447 | Code | 11 | | 2 | 00/05B7 : A9 00 | COMPL1 LDA #$0 ;CLEAR A. + 467 | 1 FPMain.asm 448 | Code | 11 | | 2 | 00/05B9 : F5 C5 | SBC {$C5},X ;SUBTRACT BYTE OF EXP1. + 468 | 1 FPMain.asm 449 | Code | 11 | | 2 | 00/05BB : 95 C5 | STA {$C5},X ;RESTORE IT. + 469 | 1 FPMain.asm 450 | Code | 11 | | 1 | 00/05BD : CA | DEX ;NEXT MORE SIGNIFICANT BYTE. + 470 | 1 FPMain.asm 451 | Code | 11 | | 2 | 00/05BE : D0 F7 | BNE COMPL1 ;LOOP UNTIL DONE. + 471 | 1 FPMain.asm 452 | Code | 11 | | 2 | 00/05C0 : F0 C5 | BEQ ADDEND ;NORMALIZE (OR SHIFT RT IF OVFL). + 472 | 1 FPMain.asm 453 | Code | 11 | | 3 | 00/05C2 : 20 42 05 | FDIV JSR MD1 ;TAKE ABS VAL OF MANT1, MANT2. <--------- div + 473 | 1 FPMain.asm 454 | Code | 11 | | 2 | 00/05C5 : E5 C5 | SBC {$C5} ;SUBTRACT EXP1 FROM EXP2. + 474 | 1 FPMain.asm 455 | Code | 11 | | 3 | 00/05C7 : 20 F2 05 | JSR MD2 ;SAVE AS QUOTIENT EXP. + 475 | 1 FPMain.asm 456 | Code | 11 | | 1 | 00/05CA : 38 | DIV1 SEC ;SET CARRY FOR SUBTRACT. + 476 | 1 FPMain.asm 457 | Code | 11 | | 2 | 00/05CB : A2 02 | LDX #$2 ;INDEX FOR 3-BYTE SUBTRACTION. + 477 | 1 FPMain.asm 458 | Code | 11 | | 2 | 00/05CD : B5 C2 | DIV2 LDA {$C2},X + 478 | 1 FPMain.asm 459 | Code | 11 | | 2 | 00/05CF : F5 C9 | SBC {$C9},X ;SUBTRACT A BYTE OF E FROM MANT2. + 479 | 1 FPMain.asm 460 | Code | 11 | | 1 | 00/05D1 : 48 | PHA ;SAVE ON STACK. + 480 | 1 FPMain.asm 461 | Code | 11 | | 1 | 00/05D2 : CA | DEX ;NEXT MORE SIGNIFICANT BYTE. + 481 | 1 FPMain.asm 462 | Code | 11 | | 2 | 00/05D3 : 10 F8 | BPL DIV2 ;LOOP UNTIL DONE. + 482 | 1 FPMain.asm 463 | Code | 11 | | 2 | 00/05D5 : A2 FD | LDX #$FD ;INDEX FOR 3-BYTE CONDITIONAL MOVE + 483 | 1 FPMain.asm 464 | Code | 11 | | 1 | 00/05D7 : 68 | DIV3 PLA ;PULL BYTE OF DIFFERENCE OFF STACK + 484 | 1 FPMain.asm 465 | Code | 11 | | 2 | 00/05D8 : 90 02 | BCC DIV4 ;IF M2