Latest tests upload

This commit is contained in:
Riccardo 2017-07-26 12:34:52 +02:00 committed by GitHub
parent 609c75d2a0
commit 34741932f2
25 changed files with 4144 additions and 0 deletions

BIN
AppleII/FP MUL new/Conv3p Normal file

Binary file not shown.

View File

@ -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

View File

@ -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
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

View File

@ -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

View File

@ -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

BIN
AppleII/FP MUL new/UniFP1 Normal file

Binary file not shown.

View File

@ -0,0 +1,522 @@
*
* Unidisk 3.5 Driver <alfa>
*
* 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 <rigreco.grc@gmail.com>.
*
* 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 <http://www.gnu.org/licenses/>.
*
*
* @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<E THEN DON'T RESTORE M2.
STA M2+3,X
DIV4 INX ;NEXT LESS SIGNIFICANT BYTE.
BNE DIV3 ;LOOP UNTIL DONE.
ROL M1+2
ROL M1+1 ;ROLL QUOTIENT LEFT, CARRY INTO LSB
ROL M1
ASL M2+2
ROL M2+1 ;SHIFT DIVIDEND LEFT
ROL M2
BCS OVFL ;OVFL IS DUE TO UNNORMED DIVISOR
DEY ;NEXT DIVIDE ITERATION.
BNE DIV1 ;LOOP UNTIL DONE 23 ITERATIONS.
BEQ MDEND ;NORM. QUOTIENT AND CORRECT SIGN.
MD2 STX M1+2
STX M1+1 ;CLEAR MANT1 (3 BYTES) FOR MUL/DIV.
STX M1
BCS OVCHK ;IF CALC. SET CARRY,CHECK FOR OVFL
BMI MD3 ;IF NEG THEN NO UNDERFLOW.
PLA ;POP ONE RETURN LEVEL.
PLA
BCC NORMX ;CLEAR X1 AND RETURN.
MD3 EOR #$80 ;COMPLEMENT SIGN BIT OF EXPONENT.
STA X1 ;STORE IT.
LDY #$17 ;COUNT 24 MUL/23 DIV ITERATIONS.
RTS ;RETURN.
OVCHK BPL MD3 ;IF POSITIVE EXP THEN NO OVFL.
OVFL JMP OVLOC
* ORG $F63D
FIX1 JSR RTAR
FIX LDA X1 ; <------------------------------ fp to int
BPL UNDFL
CMP #$8E
BNE FIX1
BIT M1
BPL FIXRTS
LDA M1+2
BEQ FIXRTS
INC M1+1
BNE FIXRTS
INC M1
FIXRTS RTS
UNDFL LDA #$0
STA M1
STA M1+1
RTS
** Input Dynamic Data append in the end of Unidisk routine **
FP1 dfb $00
dfb $00
dfb $00
dfb $00
*
FP2 dfb $00
dfb $00
dfb $00
dfb $00

View File

@ -0,0 +1,549 @@
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
1 | 1 UniFP1.asm 1 | Comment | 11 | | 0 | 00/8000 | *
2 | 1 UniFP1.asm 2 | Comment | 11 | | 0 | 00/8000 | * Unidisk 3.5 Driver <alfa>
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 <rigreco.grc@gmail.com>.
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 <http://www.gnu.org/licenses/>.
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 M2<E THEN DON'T RESTORE M2.
487 | 1 UniFP1.asm 468 | Code | 11 | | 2 | 00/05DD : 95 C5 | STA {$C2}+3,X
488 | 1 UniFP1.asm 469 | Code | 11 | | 1 | 00/05DF : E8 | DIV4 INX ;NEXT LESS SIGNIFICANT BYTE.
489 | 1 UniFP1.asm 470 | Code | 11 | | 2 | 00/05E0 : D0 F8 | BNE DIV3 ;LOOP UNTIL DONE.
490 | 1 UniFP1.asm 471 | Code | 11 | | 2 | 00/05E2 : 26 C8 | ROL {$C6}+2
491 | 1 UniFP1.asm 472 | Code | 11 | | 2 | 00/05E4 : 26 C7 | ROL {$C6}+1 ;ROLL QUOTIENT LEFT, CARRY INTO LSB
492 | 1 UniFP1.asm 473 | Code | 11 | | 2 | 00/05E6 : 26 C6 | ROL {$C6}
493 | 1 UniFP1.asm 474 | Code | 11 | | 2 | 00/05E8 : 06 C4 | ASL {$C2}+2
494 | 1 UniFP1.asm 475 | Code | 11 | | 2 | 00/05EA : 26 C3 | ROL {$C2}+1 ;SHIFT DIVIDEND LEFT
495 | 1 UniFP1.asm 476 | Code | 11 | | 2 | 00/05EC : 26 C2 | ROL {$C2}
496 | 1 UniFP1.asm 477 | Code | 11 | | 2 | 00/05EE : B0 1C | BCS OVFL ;OVFL IS DUE TO UNNORMED DIVISOR
497 | 1 UniFP1.asm 478 | Code | 11 | | 1 | 00/05F0 : 88 | DEY ;NEXT DIVIDE ITERATION.
498 | 1 UniFP1.asm 479 | Code | 11 | | 2 | 00/05F1 : D0 DA | BNE DIV1 ;LOOP UNTIL DONE 23 ITERATIONS.
499 | 1 UniFP1.asm 480 | Code | 11 | | 2 | 00/05F3 : F0 BE | BEQ MDEND ;NORM. QUOTIENT AND CORRECT SIGN.
500 | 1 UniFP1.asm 481 | Code | 11 | | 2 | 00/05F5 : 86 C8 | MD2 STX {$C6}+2
501 | 1 UniFP1.asm 482 | Code | 11 | | 2 | 00/05F7 : 86 C7 | STX {$C6}+1 ;CLEAR MANT1 (3 BYTES) FOR MUL/DIV.
502 | 1 UniFP1.asm 483 | Code | 11 | | 2 | 00/05F9 : 86 C6 | STX {$C6}
503 | 1 UniFP1.asm 484 | Code | 11 | | 2 | 00/05FB : B0 0D | BCS OVCHK ;IF CALC. SET CARRY,CHECK FOR OVFL
504 | 1 UniFP1.asm 485 | Code | 11 | | 2 | 00/05FD : 30 04 | BMI MD3 ;IF NEG THEN NO UNDERFLOW.
505 | 1 UniFP1.asm 486 | Code | 11 | | 1 | 00/05FF : 68 | PLA ;POP ONE RETURN LEVEL.
506 | 1 UniFP1.asm 487 | Code | 11 | | 1 | 00/0600 : 68 | PLA
507 | 1 UniFP1.asm 488 | Code | 11 | | 2 | 00/0601 : 90 B2 | BCC NORMX ;CLEAR X1 AND RETURN.
508 | 1 UniFP1.asm 489 | Code | 11 | | 2 | 00/0603 : 49 80 | MD3 EOR #$80 ;COMPLEMENT SIGN BIT OF EXPONENT.
509 | 1 UniFP1.asm 490 | Code | 11 | | 2 | 00/0605 : 85 C5 | STA {$C5} ;STORE IT.
510 | 1 UniFP1.asm 491 | Code | 11 | | 2 | 00/0607 : A0 17 | LDY #$17 ;COUNT 24 MUL/23 DIV ITERATIONS.
511 | 1 UniFP1.asm 492 | Code | 11 | | 1 | 00/0609 : 60 | RTS ;RETURN.
512 | 1 UniFP1.asm 493 | Code | 11 | | 2 | 00/060A : 10 F7 | OVCHK BPL MD3 ;IF POSITIVE EXP THEN NO OVFL.
513 | 1 UniFP1.asm 494 | Code | 11 | | 3 | 00/060C : 4C 10 0C | OVFL JMP {$C10}
514 | 1 UniFP1.asm 495 | Comment | 11 | | 0 | 00/060F | * ORG $F63D
515 | 1 UniFP1.asm 496 | Code | 11 | | 3 | 00/060F : 20 90 05 | FIX1 JSR RTAR
516 | 1 UniFP1.asm 497 | Code | 11 | | 2 | 00/0612 : A5 C5 | FIX LDA {$C5} ; <------------------------------ fp to int
517 | 1 UniFP1.asm 498 | Code | 11 | | 2 | 00/0614 : 10 13 | BPL UNDFL
518 | 1 UniFP1.asm 499 | Code | 11 | | 2 | 00/0616 : C9 8E | CMP #$8E
519 | 1 UniFP1.asm 500 | Code | 11 | | 2 | 00/0618 : D0 F5 | BNE FIX1
520 | 1 UniFP1.asm 501 | Code | 11 | | 2 | 00/061A : 24 C6 | BIT {$C6}
521 | 1 UniFP1.asm 502 | Code | 11 | | 2 | 00/061C : 10 0A | BPL FIXRTS
522 | 1 UniFP1.asm 503 | Code | 11 | | 2 | 00/061E : A5 C8 | LDA {$C6}+2
523 | 1 UniFP1.asm 504 | Code | 11 | | 2 | 00/0620 : F0 06 | BEQ FIXRTS
524 | 1 UniFP1.asm 505 | Code | 11 | | 2 | 00/0622 : E6 C7 | INC {$C6}+1
525 | 1 UniFP1.asm 506 | Code | 11 | | 2 | 00/0624 : D0 02 | BNE FIXRTS
526 | 1 UniFP1.asm 507 | Code | 11 | | 2 | 00/0626 : E6 C6 | INC {$C6}
527 | 1 UniFP1.asm 508 | Code | 11 | | 1 | 00/0628 : 60 | FIXRTS RTS
528 | 1 UniFP1.asm 509 | Code | 11 | | 2 | 00/0629 : A9 00 | UNDFL LDA #$0
529 | 1 UniFP1.asm 510 | Code | 11 | | 2 | 00/062B : 85 C6 | STA {$C6}
530 | 1 UniFP1.asm 511 | Code | 11 | | 2 | 00/062D : 85 C7 | STA {$C6}+1
531 | 1 UniFP1.asm 512 | Code | 11 | | 1 | 00/062F : 60 | RTS
532 | 1 UniFP1.asm 513 | Comment | 11 | | 0 | 00/0630 | ** Input Dynamic Data append in the end of Unidisk routine **
533 | 1 UniFP1.asm 514 | Data | 11 | | 1 | 00/0630 : 00 | FP1 dfb $00
534 | 1 UniFP1.asm 515 | Data | 11 | | 1 | 00/0631 : 00 | dfb $00
535 | 1 UniFP1.asm 516 | Data | 11 | | 1 | 00/0632 : 00 | dfb $00
536 | 1 UniFP1.asm 517 | Data | 11 | | 1 | 00/0633 : 00 | dfb $00
537 | 1 UniFP1.asm 518 | Comment | 11 | | 0 | 00/0634 | *
538 | 1 UniFP1.asm 519 | Data | 11 | | 1 | 00/0634 : 00 | FP2 dfb $00
539 | 1 UniFP1.asm 520 | Data | 11 | | 1 | 00/0635 : 00 | dfb $00
540 | 1 UniFP1.asm 521 | Data | 11 | | 1 | 00/0636 : 00 | dfb $00
541 | 1 UniFP1.asm 522 | Data | 11 | | 1 | 00/0637 : 00 | dfb $00
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

BIN
AppleII/FP MUL new/UniFP2 Normal file

Binary file not shown.

View File

@ -0,0 +1,326 @@
*
* Unidisk 3.5 Driver <alfa>
*
* 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 <rigreco.grc@gmail.com>.
*
* 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 <http://www.gnu.org/licenses/>.
*
*
* @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
; 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 #<PROGEND
; bcc LOOP
; beq LOOP
;CHKCS pla
; cmp CHKSUM
; bne ERRCHK
***********************************************
* Find a Protocol Converter in one of the slots.
START jsr FindPC
bcs Error
*** Set Address ***
jsr Dispatch
dfb ControlCmd
dw SET_ADD
*
jsr EXEC ; Jump the Error routine
rts
**************** CHKSUM ERROR Routine ***************
*
;ERRCHK sta CHKCALC
; lda #"E"
; jsr COut
; rts
;CHKCALC dfb $00
**************** PROTOCOL CONVERTER ERROR Routine ***
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 FP1 ; Absolute addressing
lda N1+1 ;M1 (1)
sta FP1+1
lda N1+2 ;M1 (2)
sta FP1+2
lda N1+3 ;M1 (3)
sta FP1+3
** 4 Byte N2 to FP2 **
lda N2 ;X2
sta FP2
lda N2+1 ;M2 (1)
sta FP2+1
lda N2+2 ;M2 (2)
sta FP2+2
lda N2+3 ;M2 (3)
sta FP2+3
*** 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
*
PROGEND rts
CHKSUM chk
******************************************************
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
*
******** CONTROL LISTS ********
*
*
*** 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 $30 ; ORG of Unidisk program, set begin data address $062E
HByte_Addr dfb $06
*
*** Download ***
CNTL_LIST4 equ *
LenghtL_byte dfb $08 ;<----- Lenght of Unidisk program Lo - Byte 312 byte
LenghtH_byte dfb $00 ;<----- Lenght of Unidisk program Hi Byte
*
**************** Start UNIDISK Program ****************
*
** Input Dynamic Data append in the end of Unidisk routine **
FP1 dfb $00
dfb $00
dfb $00
dfb $00
*
FP2 dfb $00
dfb $00
dfb $00
dfb $00
**************** End UNIDISK Program ****************

View File

@ -0,0 +1,351 @@
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
1 | 1 UniFP2.asm 1 | Comment | 11 | | 0 | 00/8000 | *
2 | 1 UniFP2.asm 2 | Comment | 11 | | 0 | 00/8000 | * Unidisk 3.5 Driver <alfa>
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 <rigreco.grc@gmail.com>.
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 <http://www.gnu.org/licenses/>.
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
52 | 1 UniFP2.asm 52 | Comment | 11 | | 0 | 00/6000 | ; sta PTR
53 | 1 UniFP2.asm 53 | Comment | 11 | | 0 | 00/6000 | ; 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 #<PROGEND
69 | 1 UniFP2.asm 69 | Comment | 11 | | 0 | 00/6000 | ; bcc LOOP
70 | 1 UniFP2.asm 70 | Comment | 11 | | 0 | 00/6000 | ; beq LOOP
71 | 1 UniFP2.asm 71 | Comment | 11 | | 0 | 00/6000 | ;CHKCS pla
72 | 1 UniFP2.asm 72 | Comment | 11 | | 0 | 00/6000 | ; cmp CHKSUM
73 | 1 UniFP2.asm 73 | Comment | 11 | | 0 | 00/6000 | ; bne ERRCHK
74 | 1 UniFP2.asm 74 | Comment | 11 | | 0 | 00/6000 | ***********************************************
75 | 1 UniFP2.asm 75 | Comment | 11 | | 0 | 00/6000 | * Find a Protocol Converter in one of the slots.
76 | 1 UniFP2.asm 76 | Code | 11 | | 3 | 00/6000 : 20 7E 60 | START jsr {ozunid_4}
77 | 1 UniFP2.asm 77 | Code | 11 | | 2 | 00/6003 : B0 0A | bcs {ozunid_1}
78 | 1 UniFP2.asm 78 | Comment | 11 | | 0 | 00/6005 | *** Set Address ***
79 | 1 UniFP2.asm 79 | Code | 11 | | 3 | 00/6005 : 20 B3 60 | jsr {ozunid_9}
80 | 1 UniFP2.asm 80 | Data | 11 | | 1 | 00/6008 : 04 | dfb {4}
81 | 1 UniFP2.asm 81 | Data | 11 | | 2 | 00/6009 : C3 60 | dw {ozunid_12}
82 | 1 UniFP2.asm 82 | Comment | 11 | | 0 | 00/600B | *
83 | 1 UniFP2.asm 83 | Code | 11 | | 3 | 00/600B : 20 31 60 | jsr EXEC ; Jump the Error routine
84 | 1 UniFP2.asm 84 | Code | 11 | | 1 | 00/600E : 60 | rts
85 | 1 UniFP2.asm 85 | Comment | 11 | | 0 | 00/600F | **************** CHKSUM ERROR Routine ***************
86 | 1 UniFP2.asm 86 | Comment | 11 | | 0 | 00/600F | *
87 | 1 UniFP2.asm 87 | Comment | 11 | | 0 | 00/600F | ;ERRCHK sta CHKCALC
88 | 1 UniFP2.asm 88 | Comment | 11 | | 0 | 00/600F | ; lda #"E"
89 | 1 UniFP2.asm 89 | Comment | 11 | | 0 | 00/600F | ; jsr COut
90 | 1 UniFP2.asm 90 | Comment | 11 | | 0 | 00/600F | ; rts
91 | 1 UniFP2.asm 91 | Comment | 11 | | 0 | 00/600F | ;CHKCALC dfb $00
92 | 1 UniFP2.asm 92 | Comment | 11 | | 0 | 00/600F | **************** PROTOCOL CONVERTER ERROR Routine ***
93 | 1 UniFP2.asm 93 | Empty | 11 | | 0 | 00/600F | ozunid_1
94 | 1 UniFP2.asm 93 | Equivalence | 11 | | 0 | 00/600F | Error equ ozunid_1
95 | 1 UniFP2.asm 94 | Comment | 11 | | 0 | 00/600F | *
96 | 1 UniFP2.asm 95 | Comment | 11 | | 0 | 00/600F | * There is either no PC around, or there was no give message
97 | 1 UniFP2.asm 96 | Comment | 11 | | 0 | 00/600F | *
98 | 1 UniFP2.asm 97 | Code | 11 | | 2 | 00/600F : A2 00 | ldx #0
99 | 1 UniFP2.asm 98 | Empty | 11 | | 0 | 00/6011 | ozunid_2
100 | 1 UniFP2.asm 98 | Equivalence | 11 | | 0 | 00/6011 | err1 equ ozunid_2
101 | 1 UniFP2.asm 99 | Code | 11 | | 3 | 00/6011 : BD 1D 60 | lda Message,x
102 | 1 UniFP2.asm 100 | Code | 11 | | 2 | 00/6014 : F0 06 | beq {ozunid_3}
103 | 1 UniFP2.asm 101 | Code | 11 | | 3 | 00/6016 : 20 ED FD | jsr {$FDED}
104 | 1 UniFP2.asm 102 | Code | 11 | | 1 | 00/6019 : E8 | inx
105 | 1 UniFP2.asm 103 | Code | 11 | | 2 | 00/601A : D0 F5 | bne {ozunid_2}
106 | 1 UniFP2.asm 104 | Comment | 11 | | 0 | 00/601C | *
107 | 1 UniFP2.asm 105 | Empty | 11 | | 0 | 00/601C | ozunid_3
108 | 1 UniFP2.asm 105 | Equivalence | 11 | | 0 | 00/601C | errout equ ozunid_3
109 | 1 UniFP2.asm 106 | Code | 11 | | 1 | 00/601C : 60 | rts
110 | 1 UniFP2.asm 107 | Comment | 11 | | 0 | 00/601D | *
111 | 1 UniFP2.asm 108 | Data | 11 | | 18 | 00/601D : 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 |
112 | 1 UniFP2.asm 109 | Data | 11 | | 2 | 00/602F : 8D 00 | dfb $8D,0
113 | 1 UniFP2.asm 110 | Comment | 11 | | 0 | 00/6031 | *******************************************************
114 | 1 UniFP2.asm 111 | Comment | 11 | | 0 | 00/6031 | *
115 | 1 UniFP2.asm 112 | Empty | 11 | | 0 | 00/6031 |
116 | 1 UniFP2.asm 113 | Comment | 11 | | 0 | 00/6031 | ** Set the Input Value first in Dynamic data **
117 | 1 UniFP2.asm 114 | Comment | 11 | | 0 | 00/6031 | ** 4 Byte N1 to FP1 **
118 | 1 UniFP2.asm 115 | Code | 11 | | 2 | 00/6031 : A5 FA | EXEC lda {$FA} ;X1
119 | 1 UniFP2.asm 116 | Code | 11 | | 3 | 00/6033 : 8D E0 60 | sta FP1 ; Absolute addressing
120 | 1 UniFP2.asm 117 | Code | 11 | | 2 | 00/6036 : A5 FB | lda {$FA}+1 ;M1 (1)
121 | 1 UniFP2.asm 118 | Code | 11 | | 3 | 00/6038 : 8D E1 60 | sta FP1+1
122 | 1 UniFP2.asm 119 | Code | 11 | | 2 | 00/603B : A5 FC | lda {$FA}+2 ;M1 (2)
123 | 1 UniFP2.asm 120 | Code | 11 | | 3 | 00/603D : 8D E2 60 | sta FP1+2
124 | 1 UniFP2.asm 121 | Code | 11 | | 2 | 00/6040 : A5 FD | lda {$FA}+3 ;M1 (3)
125 | 1 UniFP2.asm 122 | Code | 11 | | 3 | 00/6042 : 8D E3 60 | sta FP1+3
126 | 1 UniFP2.asm 123 | Empty | 11 | | 0 | 00/6045 |
127 | 1 UniFP2.asm 124 | Comment | 11 | | 0 | 00/6045 | ** 4 Byte N2 to FP2 **
128 | 1 UniFP2.asm 125 | Code | 11 | | 2 | 00/6045 : A5 EC | lda {$EC} ;X2
129 | 1 UniFP2.asm 126 | Code | 11 | | 3 | 00/6047 : 8D E4 60 | sta FP2
130 | 1 UniFP2.asm 127 | Code | 11 | | 2 | 00/604A : A5 ED | lda {$EC}+1 ;M2 (1)
131 | 1 UniFP2.asm 128 | Code | 11 | | 3 | 00/604C : 8D E5 60 | sta FP2+1
132 | 1 UniFP2.asm 129 | Code | 11 | | 2 | 00/604F : A5 EE | lda {$EC}+2 ;M2 (2)
133 | 1 UniFP2.asm 130 | Code | 11 | | 3 | 00/6051 : 8D E6 60 | sta FP2+2
134 | 1 UniFP2.asm 131 | Code | 11 | | 2 | 00/6054 : A5 EF | lda {$EC}+3 ;M2 (3)
135 | 1 UniFP2.asm 132 | Code | 11 | | 3 | 00/6056 : 8D E7 60 | sta FP2+3
136 | 1 UniFP2.asm 133 | Empty | 11 | | 0 | 00/6059 |
137 | 1 UniFP2.asm 134 | Comment | 11 | | 0 | 00/6059 | *** Download ***
138 | 1 UniFP2.asm 135 | Code | 11 | | 3 | 00/6059 : 20 B3 60 | jsr {ozunid_9}
139 | 1 UniFP2.asm 136 | Data | 11 | | 1 | 00/605C : 04 | dfb {4}
140 | 1 UniFP2.asm 137 | Data | 11 | | 2 | 00/605D : C8 60 | dw {ozunid_13}
141 | 1 UniFP2.asm 138 | Comment | 11 | | 0 | 00/605F | ** Set Unidisk Registers **
142 | 1 UniFP2.asm 139 | Comment | 11 | | 0 | 00/605F | ;First time execution
143 | 1 UniFP2.asm 140 | Code | 11 | | 2 | 00/605F : A9 00 | lda #$00 ; Target the first time entry point
144 | 1 UniFP2.asm 141 | Code | 11 | | 3 | 00/6061 : 8D D8 60 | sta LowPC_reg ; First time set init value of PC, just for the next execution
145 | 1 UniFP2.asm 142 | Comment | 11 | | 0 | 00/6064 | * The program begin to PC preset to $0500 *
146 | 1 UniFP2.asm 143 | Comment | 11 | | 0 | 00/6064 | *
147 | 1 UniFP2.asm 144 | Comment | 11 | | 0 | 00/6064 | ** Execute **
148 | 1 UniFP2.asm 145 | Code | 11 | | 3 | 00/6064 : 20 B3 60 | jsr {ozunid_9}
149 | 1 UniFP2.asm 146 | Data | 11 | | 1 | 00/6067 : 04 | dfb {4}
150 | 1 UniFP2.asm 147 | Data | 11 | | 2 | 00/6068 : CD 60 | dw {ozunid_14}
151 | 1 UniFP2.asm 148 | Comment | 11 | | 0 | 00/606A | ** Read **
152 | 1 UniFP2.asm 149 | Code | 11 | | 3 | 00/606A : 20 B3 60 | READ jsr {ozunid_9}
153 | 1 UniFP2.asm 150 | Data | 11 | | 1 | 00/606D : 00 | dfb {0}
154 | 1 UniFP2.asm 151 | Data | 11 | | 2 | 00/606E : B6 60 | dw {ozunid_10}
155 | 1 UniFP2.asm 152 | Code | 11 | | 2 | 00/6070 : B0 9D | bcs {ozunid_1}
156 | 1 UniFP2.asm 153 | Comment | 11 | | 0 | 00/6072 | *
157 | 1 UniFP2.asm 154 | Comment | 11 | | 0 | 00/6072 | **** Store Output results in //c ****
158 | 1 UniFP2.asm 155 | Empty | 11 | | 0 | 00/6072 |
159 | 1 UniFP2.asm 156 | Comment | 11 | | 0 | 00/6072 | * First time execute *
160 | 1 UniFP2.asm 157 | Comment | 11 | | 0 | 00/6072 | * lda UNIAcc_reg
161 | 1 UniFP2.asm 158 | Comment | 11 | | 0 | 00/6072 | * sta RSLT
162 | 1 UniFP2.asm 159 | Code | 11 | | 3 | 00/6072 : AD BF 60 | lda UNIX_reg
163 | 1 UniFP2.asm 160 | Code | 11 | | 2 | 00/6075 : 85 1D | sta {$1D} ; Store the result
164 | 1 UniFP2.asm 161 | Code | 11 | | 3 | 00/6077 : AD C0 60 | lda UNIY_reg
165 | 1 UniFP2.asm 162 | Code | 11 | | 2 | 00/607A : 85 1E | sta {$1D}+1
166 | 1 UniFP2.asm 163 | Empty | 11 | | 0 | 00/607C |
167 | 1 UniFP2.asm 164 | Comment | 11 | | 0 | 00/607C | ** Second time execute **
168 | 1 UniFP2.asm 165 | Comment | 11 | | 0 | 00/607C | * lda #$3C ; Target the secont time entry point
169 | 1 UniFP2.asm 166 | Comment | 11 | | 0 | 00/607C | * sta LowPC_reg ; Second time set new value of PC
170 | 1 UniFP2.asm 167 | Comment | 11 | | 0 | 00/607C | ** Execute **
171 | 1 UniFP2.asm 168 | Comment | 11 | | 0 | 00/607C | * jsr Dispatch
172 | 1 UniFP2.asm 169 | Comment | 11 | | 0 | 00/607C | * dfb ControlCmd
173 | 1 UniFP2.asm 170 | Comment | 11 | | 0 | 00/607C | * dw EXE
174 | 1 UniFP2.asm 171 | Comment | 11 | | 0 | 00/607C | ** Read **
175 | 1 UniFP2.asm 172 | Comment | 11 | | 0 | 00/607C | * jsr Dispatch
176 | 1 UniFP2.asm 173 | Comment | 11 | | 0 | 00/607C | * dfb StatusCmd
177 | 1 UniFP2.asm 174 | Comment | 11 | | 0 | 00/607C | * dw DParms
178 | 1 UniFP2.asm 175 | Comment | 11 | | 0 | 00/607C | * bcs Error
179 | 1 UniFP2.asm 176 | Empty | 11 | | 0 | 00/607C |
180 | 1 UniFP2.asm 177 | Comment | 11 | | 0 | 00/607C | * Second time execute only to read the latest Byte of FP1*
181 | 1 UniFP2.asm 178 | Comment | 11 | | 0 | 00/607C | * lda UNIAcc_reg
182 | 1 UniFP2.asm 179 | Comment | 11 | | 0 | 00/607C | * sta RSLT+3
183 | 1 UniFP2.asm 180 | Comment | 11 | | 0 | 00/607C | *
184 | 1 UniFP2.asm 181 | Code | 11 | | 1 | 00/607C : 60 | PROGEND rts
185 | 1 UniFP2.asm 182 | Data | 11 | | 1 | 00/607D : 00 | CHKSUM chk
186 | 1 UniFP2.asm 183 | Comment | 11 | | 0 | 00/607E | ******************************************************
187 | 1 UniFP2.asm 184 | Empty | 11 | | 0 | 00/607E | ozunid_4
188 | 1 UniFP2.asm 184 | Equivalence | 11 | | 0 | 00/607E | FindPC equ ozunid_4
189 | 1 UniFP2.asm 185 | Comment | 11 | | 0 | 00/607E | *
190 | 1 UniFP2.asm 186 | Comment | 11 | | 0 | 00/607E | * Search slot 7 to slot 1 looking for signature bytes
191 | 1 UniFP2.asm 187 | Comment | 11 | | 0 | 00/607E | *
192 | 1 UniFP2.asm 188 | Code | 11 | | 2 | 00/607E : A2 07 | ldx #7 ;Do for seven slots
193 | 1 UniFP2.asm 189 | Code | 11 | | 2 | 00/6080 : A9 C7 | lda #$C7
194 | 1 UniFP2.asm 190 | Code | 11 | | 2 | 00/6082 : 85 07 | sta {$0007}
195 | 1 UniFP2.asm 191 | Code | 11 | | 2 | 00/6084 : A9 00 | lda #$00
196 | 1 UniFP2.asm 192 | Code | 11 | | 2 | 00/6086 : 85 06 | sta {$0006}
197 | 1 UniFP2.asm 193 | Comment | 11 | | 0 | 00/6088 | *
198 | 1 UniFP2.asm 194 | Empty | 11 | | 0 | 00/6088 | ozunid_5
199 | 1 UniFP2.asm 194 | Equivalence | 11 | | 0 | 00/6088 | newslot equ ozunid_5
200 | 1 UniFP2.asm 195 | Code | 11 | | 2 | 00/6088 : A0 07 | ldy #7
201 | 1 UniFP2.asm 196 | Comment | 11 | | 0 | 00/608A | *
202 | 1 UniFP2.asm 197 | Empty | 11 | | 0 | 00/608A | ozunid_6
203 | 1 UniFP2.asm 197 | Equivalence | 11 | | 0 | 00/608A | again equ ozunid_6
204 | 1 UniFP2.asm 198 | Code | 11 | | 2 | 00/608A : B1 06 | lda ({$0006}),y
205 | 1 UniFP2.asm 199 | Code | 11 | | 3 | 00/608C : D9 AB 60 | cmp sigtab,y ;One for byte signature
206 | 1 UniFP2.asm 200 | Code | 11 | | 2 | 00/608F : F0 07 | beq {ozunid_7} ;Found one signature byte
207 | 1 UniFP2.asm 201 | Code | 11 | | 2 | 00/6091 : C6 07 | dec {$0007}
208 | 1 UniFP2.asm 202 | Code | 11 | | 1 | 00/6093 : CA | dex
209 | 1 UniFP2.asm 203 | Code | 11 | | 2 | 00/6094 : D0 F2 | bne {ozunid_5}
210 | 1 UniFP2.asm 204 | Comment | 11 | | 0 | 00/6096 | *
211 | 1 UniFP2.asm 205 | Comment | 11 | | 0 | 00/6096 | * if we get here, no PC find
212 | 1 UniFP2.asm 206 | Code | 11 | | 1 | 00/6096 : 38 | sec
213 | 1 UniFP2.asm 207 | Code | 11 | | 1 | 00/6097 : 60 | rts
214 | 1 UniFP2.asm 208 | Comment | 11 | | 0 | 00/6098 | *
215 | 1 UniFP2.asm 209 | Comment | 11 | | 0 | 00/6098 | * if we get here, no byte find on PC
216 | 1 UniFP2.asm 210 | Empty | 11 | | 0 | 00/6098 | ozunid_7
217 | 1 UniFP2.asm 210 | Equivalence | 11 | | 0 | 00/6098 | maybe equ ozunid_7
218 | 1 UniFP2.asm 211 | Code | 11 | | 1 | 00/6098 : 88 | dey
219 | 1 UniFP2.asm 212 | Code | 11 | | 1 | 00/6099 : 88 | dey ;if N=1 then all sig bytes OK
220 | 1 UniFP2.asm 213 | Code | 11 | | 2 | 00/609A : 10 EE | bpl {ozunid_6}
221 | 1 UniFP2.asm 214 | Comment | 11 | | 0 | 00/609C | * Found PC interface. Set up call address.
222 | 1 UniFP2.asm 215 | Comment | 11 | | 0 | 00/609C | * we already have high byte ($CN), we need low byte
223 | 1 UniFP2.asm 216 | Comment | 11 | | 0 | 00/609C | *
224 | 1 UniFP2.asm 217 | Empty | 11 | | 0 | 00/609C | ozunid_8
225 | 1 UniFP2.asm 217 | Equivalence | 11 | | 0 | 00/609C | foundPC equ ozunid_8
226 | 1 UniFP2.asm 218 | Code | 11 | | 2 | 00/609C : A9 FF | lda #$FF
227 | 1 UniFP2.asm 219 | Code | 11 | | 2 | 00/609E : 85 06 | sta {$0006}
228 | 1 UniFP2.asm 220 | Code | 11 | | 2 | 00/60A0 : A0 00 | ldy #0 ;For indirect load
229 | 1 UniFP2.asm 221 | Code | 11 | | 2 | 00/60A2 : B1 06 | lda ({$0006}),y ;Get the byte
230 | 1 UniFP2.asm 222 | Comment | 11 | | 0 | 00/60A4 | *
231 | 1 UniFP2.asm 223 | Comment | 11 | | 0 | 00/60A4 | * Now the Acc has the low oreder ProDOS entry point.
232 | 1 UniFP2.asm 224 | Comment | 11 | | 0 | 00/60A4 | * The PC entry is three locations past this ...
233 | 1 UniFP2.asm 225 | Comment | 11 | | 0 | 00/60A4 | *
234 | 1 UniFP2.asm 226 | Code | 11 | | 1 | 00/60A4 : 18 | clc
235 | 1 UniFP2.asm 227 | Code | 11 | | 2 | 00/60A5 : 69 03 | adc #3
236 | 1 UniFP2.asm 228 | Code | 11 | | 2 | 00/60A7 : 85 06 | sta {$0006}
237 | 1 UniFP2.asm 229 | Comment | 11 | | 0 | 00/60A9 | *
238 | 1 UniFP2.asm 230 | Comment | 11 | | 0 | 00/60A9 | * Now ZPTempL has PC entry point.
239 | 1 UniFP2.asm 231 | Comment | 11 | | 0 | 00/60A9 | * Return with carry clear.
240 | 1 UniFP2.asm 232 | Comment | 11 | | 0 | 00/60A9 | *
241 | 1 UniFP2.asm 233 | Code | 11 | | 1 | 00/60A9 : 18 | clc
242 | 1 UniFP2.asm 234 | Code | 11 | | 1 | 00/60AA : 60 | rts
243 | 1 UniFP2.asm 235 | Comment | 11 | | 0 | 00/60AB | ***********************************************************
244 | 1 UniFP2.asm 236 | Comment | 11 | | 0 | 00/60AB | *
245 | 1 UniFP2.asm 237 | Comment | 11 | | 0 | 00/60AB | * There are the PC signature bytes in their relative order.
246 | 1 UniFP2.asm 238 | Comment | 11 | | 0 | 00/60AB | * The $FF bytes are filler bytes and are not compared.
247 | 1 UniFP2.asm 239 | Comment | 11 | | 0 | 00/60AB | *
248 | 1 UniFP2.asm 240 | Data | 11 | | 4 | 00/60AB : FF 20 FF 00 | sigtab dfb $FF,$20,$FF,$00
249 | 1 UniFP2.asm 241 | Data | 11 | | 4 | 00/60AF : FF 03 FF 00 | dfb $FF,$03,$FF,$00
250 | 1 UniFP2.asm 242 | Comment | 11 | | 0 | 00/60B3 | *
251 | 1 UniFP2.asm 243 | Empty | 11 | | 0 | 00/60B3 | ozunid_9
252 | 1 UniFP2.asm 243 | Equivalence | 11 | | 0 | 00/60B3 | Dispatch equ ozunid_9
253 | 1 UniFP2.asm 244 | Code | 11 | | 3 | 00/60B3 : 6C 06 00 | jmp ({$0006}) ;Simulate an indirect JSR to PC
254 | 1 UniFP2.asm 245 | Comment | 11 | | 0 | 00/60B6 | *
255 | 1 UniFP2.asm 246 | Comment | 11 | | 0 | 00/60B6 | *** Status Parameter Set for UNI ***
256 | 1 UniFP2.asm 247 | Empty | 11 | | 0 | 00/60B6 | ozunid_10
257 | 1 UniFP2.asm 247 | Equivalence | 11 | | 0 | 00/60B6 | DParms equ ozunid_10
258 | 1 UniFP2.asm 248 | Data | 11 | | 1 | 00/60B6 : 03 | DPParmsCt dfb 3 ;Status calls have three parameters
259 | 1 UniFP2.asm 249 | Data | 11 | | 1 | 00/60B7 : 01 | DPUnit dfb 1
260 | 1 UniFP2.asm 250 | Data | 11 | | 2 | 00/60B8 : BB 60 | DPBuffer dw {ozunid_11}
261 | 1 UniFP2.asm 251 | Data | 11 | | 1 | 00/60BA : 05 | DPStatCode dfb {5}
262 | 1 UniFP2.asm 252 | Comment | 11 | | 0 | 00/60BB | *
263 | 1 UniFP2.asm 253 | Comment | 11 | | 0 | 00/60BB | *
264 | 1 UniFP2.asm 254 | Comment | 11 | | 0 | 00/60BB | *
265 | 1 UniFP2.asm 255 | Comment | 11 | | 0 | 00/60BB | *** Status List UNI ***
266 | 1 UniFP2.asm 256 | Empty | 11 | | 0 | 00/60BB | ozunid_11
267 | 1 UniFP2.asm 256 | Equivalence | 11 | | 0 | 00/60BB | UNI equ ozunid_11
268 | 1 UniFP2.asm 257 | Data | 11 | | 1 | 00/60BB : 00 | dfb 0
269 | 1 UniFP2.asm 258 | Data | 11 | | 1 | 00/60BC : 00 | UNIError dfb 0
270 | 1 UniFP2.asm 259 | Data | 11 | | 1 | 00/60BD : 00 | UNIRetries dfb 0
271 | 1 UniFP2.asm 260 | Data | 11 | | 1 | 00/60BE : 00 | UNIAcc_reg dfb 0
272 | 1 UniFP2.asm 261 | Data | 11 | | 1 | 00/60BF : 00 | UNIX_reg dfb 0
273 | 1 UniFP2.asm 262 | Data | 11 | | 1 | 00/60C0 : 00 | UNIY_reg dfb 0
274 | 1 UniFP2.asm 263 | Data | 11 | | 1 | 00/60C1 : 00 | UNIP_val dfb 0
275 | 1 UniFP2.asm 264 | Data | 11 | | 1 | 00/60C2 : 00 | HHH dfb 0
276 | 1 UniFP2.asm 265 | Comment | 11 | | 0 | 00/60C3 | *
277 | 1 UniFP2.asm 266 | Comment | 11 | | 0 | 00/60C3 | *** Set Address ***
278 | 1 UniFP2.asm 267 | Empty | 11 | | 0 | 00/60C3 | ozunid_12
279 | 1 UniFP2.asm 267 | Equivalence | 11 | | 0 | 00/60C3 | SET_ADD equ ozunid_12
280 | 1 UniFP2.asm 268 | Data | 11 | | 1 | 00/60C3 : 03 | dfb 3
281 | 1 UniFP2.asm 269 | Data | 11 | | 1 | 00/60C4 : 01 | dfb 1
282 | 1 UniFP2.asm 270 | Data | 11 | | 2 | 00/60C5 : DA 60 | dw {ozunid_16}
283 | 1 UniFP2.asm 271 | Data | 11 | | 1 | 00/60C7 : 06 | dfb {6}
284 | 1 UniFP2.asm 272 | Comment | 11 | | 0 | 00/60C8 | *
285 | 1 UniFP2.asm 273 | Comment | 11 | | 0 | 00/60C8 | *** Download ***
286 | 1 UniFP2.asm 274 | Empty | 11 | | 0 | 00/60C8 | ozunid_13
287 | 1 UniFP2.asm 274 | Equivalence | 11 | | 0 | 00/60C8 | DOWNLOAD equ ozunid_13
288 | 1 UniFP2.asm 275 | Data | 11 | | 1 | 00/60C8 : 03 | dfb 3
289 | 1 UniFP2.asm 276 | Data | 11 | | 1 | 00/60C9 : 01 | dfb 1
290 | 1 UniFP2.asm 277 | Data | 11 | | 2 | 00/60CA : DE 60 | dw {ozunid_17}
291 | 1 UniFP2.asm 278 | Data | 11 | | 1 | 00/60CC : 07 | dfb {7}
292 | 1 UniFP2.asm 279 | Comment | 11 | | 0 | 00/60CD | *
293 | 1 UniFP2.asm 280 | Comment | 11 | | 0 | 00/60CD | *** Execute ***
294 | 1 UniFP2.asm 281 | Empty | 11 | | 0 | 00/60CD | ozunid_14
295 | 1 UniFP2.asm 281 | Equivalence | 11 | | 0 | 00/60CD | EXE equ ozunid_14
296 | 1 UniFP2.asm 282 | Data | 11 | | 1 | 00/60CD : 03 | dfb 3
297 | 1 UniFP2.asm 283 | Data | 11 | | 1 | 00/60CE : 01 | dfb 1
298 | 1 UniFP2.asm 284 | Data | 11 | | 2 | 00/60CF : D2 60 | dw {ozunid_15}
299 | 1 UniFP2.asm 285 | Data | 11 | | 1 | 00/60D1 : 05 | dfb {5}
300 | 1 UniFP2.asm 286 | Comment | 11 | | 0 | 00/60D2 | *
301 | 1 UniFP2.asm 287 | Comment | 11 | | 0 | 00/60D2 | ******** CONTROL LISTS ********
302 | 1 UniFP2.asm 288 | Comment | 11 | | 0 | 00/60D2 | *
303 | 1 UniFP2.asm 289 | Comment | 11 | | 0 | 00/60D2 | *
304 | 1 UniFP2.asm 290 | Comment | 11 | | 0 | 00/60D2 | *** Execute ***
305 | 1 UniFP2.asm 291 | Empty | 11 | | 0 | 00/60D2 | ozunid_15
306 | 1 UniFP2.asm 291 | Equivalence | 11 | | 0 | 00/60D2 | CNTL_LIST2 equ ozunid_15
307 | 1 UniFP2.asm 292 | Data | 11 | | 1 | 00/60D2 : 06 | Clow_byte dfb $06
308 | 1 UniFP2.asm 293 | Data | 11 | | 1 | 00/60D3 : 00 | Chigh_byte dfb $00
309 | 1 UniFP2.asm 294 | Data | 11 | | 1 | 00/60D4 : 00 | AccValue dfb $00 ; Init Value Unidisk Accumulator Register
310 | 1 UniFP2.asm 295 | Data | 11 | | 1 | 00/60D5 : 00 | X_reg dfb $00 ; Init Value Unidisk X Register
311 | 1 UniFP2.asm 296 | Data | 11 | | 1 | 00/60D6 : 00 | Y_reg dfb $00 ; Init Value Unidisk Y Register
312 | 1 UniFP2.asm 297 | Data | 11 | | 1 | 00/60D7 : 00 | ProStatus dfb $00 ; Init Value Unidisk Status Register
313 | 1 UniFP2.asm 298 | Data | 11 | | 1 | 00/60D8 : 00 | LowPC_reg dfb $00 ; Init Value Unidisk Program Counter $0500 at eny dowload
314 | 1 UniFP2.asm 299 | Data | 11 | | 1 | 00/60D9 : 05 | HighPC_reg dfb $05 ; $05 first execution, $3C second execution
315 | 1 UniFP2.asm 300 | Comment | 11 | | 0 | 00/60DA | *
316 | 1 UniFP2.asm 301 | Comment | 11 | | 0 | 00/60DA | *** Set Address ***
317 | 1 UniFP2.asm 302 | Empty | 11 | | 0 | 00/60DA | ozunid_16
318 | 1 UniFP2.asm 302 | Equivalence | 11 | | 0 | 00/60DA | CNTL_LIST3 equ ozunid_16
319 | 1 UniFP2.asm 303 | Data | 11 | | 1 | 00/60DA : 02 | CountL_byte dfb $02
320 | 1 UniFP2.asm 304 | Data | 11 | | 1 | 00/60DB : 00 | CountH_byte dfb $00
321 | 1 UniFP2.asm 305 | Data | 11 | | 1 | 00/60DC : 2D | LByte_Addr dfb $2D ; ORG of Unidisk program, set begin data address $062E
322 | 1 UniFP2.asm 306 | Data | 11 | | 1 | 00/60DD : 06 | HByte_Addr dfb $06
323 | 1 UniFP2.asm 307 | Comment | 11 | | 0 | 00/60DE | *
324 | 1 UniFP2.asm 308 | Comment | 11 | | 0 | 00/60DE | *** Download ***
325 | 1 UniFP2.asm 309 | Empty | 11 | | 0 | 00/60DE | ozunid_17
326 | 1 UniFP2.asm 309 | Equivalence | 11 | | 0 | 00/60DE | CNTL_LIST4 equ ozunid_17
327 | 1 UniFP2.asm 310 | Data | 11 | | 1 | 00/60DE : 08 | LenghtL_byte dfb $08 ;<----- Lenght of Unidisk program Lo - Byte 312 byte
328 | 1 UniFP2.asm 311 | Data | 11 | | 1 | 00/60DF : 00 | LenghtH_byte dfb $00 ;<----- Lenght of Unidisk program Hi Byte
329 | 1 UniFP2.asm 312 | Comment | 11 | | 0 | 00/60E0 | *
330 | 1 UniFP2.asm 313 | Comment | 11 | | 0 | 00/60E0 | **************** Start UNIDISK Program ****************
331 | 1 UniFP2.asm 314 | Comment | 11 | | 0 | 00/60E0 | *
332 | 1 UniFP2.asm 315 | Empty | 11 | | 0 | 00/60E0 |
333 | 1 UniFP2.asm 316 | Comment | 11 | | 0 | 00/60E0 | ** Input Dynamic Data append in the end of Unidisk routine **
334 | 1 UniFP2.asm 317 | Data | 11 | | 1 | 00/60E0 : 00 | FP1 dfb $00
335 | 1 UniFP2.asm 318 | Data | 11 | | 1 | 00/60E1 : 00 | dfb $00
336 | 1 UniFP2.asm 319 | Data | 11 | | 1 | 00/60E2 : 00 | dfb $00
337 | 1 UniFP2.asm 320 | Data | 11 | | 1 | 00/60E3 : 00 | dfb $00
338 | 1 UniFP2.asm 321 | Comment | 11 | | 0 | 00/60E4 | *
339 | 1 UniFP2.asm 322 | Data | 11 | | 1 | 00/60E4 : 00 | FP2 dfb $00
340 | 1 UniFP2.asm 323 | Data | 11 | | 1 | 00/60E5 : 00 | dfb $00
341 | 1 UniFP2.asm 324 | Data | 11 | | 1 | 00/60E6 : 00 | dfb $00
342 | 1 UniFP2.asm 325 | Data | 11 | | 1 | 00/60E7 : 00 | dfb $00
343 | 1 UniFP2.asm 326 | Comment | 11 | | 0 | 00/60E8 | **************** End UNIDISK Program ****************
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

View File

@ -0,0 +1,3 @@
Conv3p=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)
UniFP2=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)
UniFP1=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)

View File

@ -0,0 +1,15 @@
5 HOME
10 PRINT CHR$ (4);"BLOAD UNIDRIVE4P"
12 PRINT CHR$ (4);"BLOAD CONV3P"
15 INPUT "N1 ? ";X
20 CALL 32768,X
27 CALL 24576
30 CALL 32831,Y
40 PRINT Y
50 PRINT CHR$ (4);"BLOAD UNIDRIVE4P2"
55 INPUT "N1 ? ";X
60 CALL 32768,X
65 CALL 24576
70 CALL 32831,Y
80 PRINT Y
90 GOTO 55

BIN
AppleII/FP f(x)/FPConv Normal file

Binary file not shown.

143
AppleII/FP f(x)/FPConv.asm Normal file
View File

@ -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

View File

@ -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
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

BIN
AppleII/FP f(x)/FPData Normal file

Binary file not shown.

326
AppleII/FP f(x)/FPData.asm Normal file
View File

@ -0,0 +1,326 @@
*
* Unidisk 3.5 DATA <alfa>
*
* 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 <rigreco.grc@gmail.com>.
*
* 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 <http://www.gnu.org/licenses/>.
*
*
* @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
; 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 #<PROGEND
; bcc LOOP
; beq LOOP
;CHKCS pla
; cmp CHKSUM
; bne ERRCHK
***********************************************
* Find a Protocol Converter in one of the slots.
START jsr FindPC
bcs Error
*** Set Address ***
jsr Dispatch
dfb ControlCmd
dw SET_ADD
*
jsr EXEC ; Jump the Error routine
rts
**************** CHKSUM ERROR Routine ***************
*
;ERRCHK sta CHKCALC
; lda #"E"
; jsr COut
; rts
;CHKCALC dfb $00
**************** PROTOCOL CONVERTER ERROR Routine ***
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 FP1 ; Absolute addressing
lda N1+1 ;M1 (1)
sta FP1+1
lda N1+2 ;M1 (2)
sta FP1+2
lda N1+3 ;M1 (3)
sta FP1+3
** 4 Byte N2 to FP2 **
lda N2 ;X2
sta FP2
lda N2+1 ;M2 (1)
sta FP2+1
lda N2+2 ;M2 (2)
sta FP2+2
lda N2+3 ;M2 (3)
sta FP2+3
*** 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 second 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
*
PROGEND rts
CHKSUM chk
******************************************************
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
*
******** CONTROL LISTS ********
*
*
*** 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 $2D ; ORG of Unidisk program, set begin data address $062D
HByte_Addr dfb $06
*
*** Download ***
CNTL_LIST4 equ *
LenghtL_byte dfb $08 ;<----- Lenght of Unidisk program Lo - Byte 312 byte
LenghtH_byte dfb $00 ;<----- Lenght of Unidisk program Hi Byte
*
**************** Start UNIDISK Program ****************
*
** Input Dynamic Data append in the end of Unidisk routine **
FP1 dfb $00
dfb $00
dfb $00
dfb $00
*
FP2 dfb $00
dfb $00
dfb $00
dfb $00
**************** End UNIDISK Program ****************

View File

@ -0,0 +1,351 @@
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
1 | 1 FPData.asm 1 | Comment | 11 | | 0 | 00/8000 | *
2 | 1 FPData.asm 2 | Comment | 11 | | 0 | 00/8000 | * Unidisk 3.5 DATA <alfa>
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 <rigreco.grc@gmail.com>.
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 <http://www.gnu.org/licenses/>.
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
52 | 1 FPData.asm 52 | Comment | 11 | | 0 | 00/6000 | ; sta PTR
53 | 1 FPData.asm 53 | Comment | 11 | | 0 | 00/6000 | ; 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 #<PROGEND
69 | 1 FPData.asm 69 | Comment | 11 | | 0 | 00/6000 | ; bcc LOOP
70 | 1 FPData.asm 70 | Comment | 11 | | 0 | 00/6000 | ; beq LOOP
71 | 1 FPData.asm 71 | Comment | 11 | | 0 | 00/6000 | ;CHKCS pla
72 | 1 FPData.asm 72 | Comment | 11 | | 0 | 00/6000 | ; cmp CHKSUM
73 | 1 FPData.asm 73 | Comment | 11 | | 0 | 00/6000 | ; bne ERRCHK
74 | 1 FPData.asm 74 | Comment | 11 | | 0 | 00/6000 | ***********************************************
75 | 1 FPData.asm 75 | Comment | 11 | | 0 | 00/6000 | * Find a Protocol Converter in one of the slots.
76 | 1 FPData.asm 76 | Code | 11 | | 3 | 00/6000 : 20 9D 60 | START jsr {ozunid_4}
77 | 1 FPData.asm 77 | Code | 11 | | 2 | 00/6003 : B0 0A | bcs {ozunid_1}
78 | 1 FPData.asm 78 | Comment | 11 | | 0 | 00/6005 | *** Set Address ***
79 | 1 FPData.asm 79 | Code | 11 | | 3 | 00/6005 : 20 D2 60 | jsr {ozunid_9}
80 | 1 FPData.asm 80 | Data | 11 | | 1 | 00/6008 : 04 | dfb {4}
81 | 1 FPData.asm 81 | Data | 11 | | 2 | 00/6009 : E2 60 | dw {ozunid_12}
82 | 1 FPData.asm 82 | Comment | 11 | | 0 | 00/600B | *
83 | 1 FPData.asm 83 | Code | 11 | | 3 | 00/600B : 20 31 60 | jsr EXEC ; Jump the Error routine
84 | 1 FPData.asm 84 | Code | 11 | | 1 | 00/600E : 60 | rts
85 | 1 FPData.asm 85 | Comment | 11 | | 0 | 00/600F | **************** CHKSUM ERROR Routine ***************
86 | 1 FPData.asm 86 | Comment | 11 | | 0 | 00/600F | *
87 | 1 FPData.asm 87 | Comment | 11 | | 0 | 00/600F | ;ERRCHK sta CHKCALC
88 | 1 FPData.asm 88 | Comment | 11 | | 0 | 00/600F | ; lda #"E"
89 | 1 FPData.asm 89 | Comment | 11 | | 0 | 00/600F | ; jsr COut
90 | 1 FPData.asm 90 | Comment | 11 | | 0 | 00/600F | ; rts
91 | 1 FPData.asm 91 | Comment | 11 | | 0 | 00/600F | ;CHKCALC dfb $00
92 | 1 FPData.asm 92 | Comment | 11 | | 0 | 00/600F | **************** PROTOCOL CONVERTER ERROR Routine ***
93 | 1 FPData.asm 93 | Empty | 11 | | 0 | 00/600F | ozunid_1
94 | 1 FPData.asm 93 | Equivalence | 11 | | 0 | 00/600F | Error equ ozunid_1
95 | 1 FPData.asm 94 | Comment | 11 | | 0 | 00/600F | *
96 | 1 FPData.asm 95 | Comment | 11 | | 0 | 00/600F | * There is either no PC around, or there was no give message
97 | 1 FPData.asm 96 | Comment | 11 | | 0 | 00/600F | *
98 | 1 FPData.asm 97 | Code | 11 | | 2 | 00/600F : A2 00 | ldx #0
99 | 1 FPData.asm 98 | Empty | 11 | | 0 | 00/6011 | ozunid_2
100 | 1 FPData.asm 98 | Equivalence | 11 | | 0 | 00/6011 | err1 equ ozunid_2
101 | 1 FPData.asm 99 | Code | 11 | | 3 | 00/6011 : BD 1D 60 | lda Message,x
102 | 1 FPData.asm 100 | Code | 11 | | 2 | 00/6014 : F0 06 | beq {ozunid_3}
103 | 1 FPData.asm 101 | Code | 11 | | 3 | 00/6016 : 20 ED FD | jsr {$FDED}
104 | 1 FPData.asm 102 | Code | 11 | | 1 | 00/6019 : E8 | inx
105 | 1 FPData.asm 103 | Code | 11 | | 2 | 00/601A : D0 F5 | bne {ozunid_2}
106 | 1 FPData.asm 104 | Comment | 11 | | 0 | 00/601C | *
107 | 1 FPData.asm 105 | Empty | 11 | | 0 | 00/601C | ozunid_3
108 | 1 FPData.asm 105 | Equivalence | 11 | | 0 | 00/601C | errout equ ozunid_3
109 | 1 FPData.asm 106 | Code | 11 | | 1 | 00/601C : 60 | rts
110 | 1 FPData.asm 107 | Comment | 11 | | 0 | 00/601D | *
111 | 1 FPData.asm 108 | Data | 11 | | 18 | 00/601D : 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 |
112 | 1 FPData.asm 109 | Data | 11 | | 2 | 00/602F : 8D 00 | dfb $8D,0
113 | 1 FPData.asm 110 | Comment | 11 | | 0 | 00/6031 | *******************************************************
114 | 1 FPData.asm 111 | Comment | 11 | | 0 | 00/6031 | *
115 | 1 FPData.asm 112 | Empty | 11 | | 0 | 00/6031 |
116 | 1 FPData.asm 113 | Comment | 11 | | 0 | 00/6031 | ** Set the Input Value first in Dynamic data **
117 | 1 FPData.asm 114 | Comment | 11 | | 0 | 00/6031 | ** 4 Byte N1 to FP1 **
118 | 1 FPData.asm 115 | Code | 11 | | 2 | 00/6031 : A5 FA | EXEC lda {$FA} ;X1
119 | 1 FPData.asm 116 | Code | 11 | | 3 | 00/6033 : 8D FF 60 | sta FP1 ; Absolute addressing
120 | 1 FPData.asm 117 | Code | 11 | | 2 | 00/6036 : A5 FB | lda {$FA}+1 ;M1 (1)
121 | 1 FPData.asm 118 | Code | 11 | | 3 | 00/6038 : 8D 00 61 | sta FP1+1
122 | 1 FPData.asm 119 | Code | 11 | | 2 | 00/603B : A5 FC | lda {$FA}+2 ;M1 (2)
123 | 1 FPData.asm 120 | Code | 11 | | 3 | 00/603D : 8D 01 61 | sta FP1+2
124 | 1 FPData.asm 121 | Code | 11 | | 2 | 00/6040 : A5 FD | lda {$FA}+3 ;M1 (3)
125 | 1 FPData.asm 122 | Code | 11 | | 3 | 00/6042 : 8D 02 61 | sta FP1+3
126 | 1 FPData.asm 123 | Empty | 11 | | 0 | 00/6045 |
127 | 1 FPData.asm 124 | Comment | 11 | | 0 | 00/6045 | ** 4 Byte N2 to FP2 **
128 | 1 FPData.asm 125 | Code | 11 | | 2 | 00/6045 : A5 EC | lda {$EC} ;X2
129 | 1 FPData.asm 126 | Code | 11 | | 3 | 00/6047 : 8D 03 61 | sta FP2
130 | 1 FPData.asm 127 | Code | 11 | | 2 | 00/604A : A5 ED | lda {$EC}+1 ;M2 (1)
131 | 1 FPData.asm 128 | Code | 11 | | 3 | 00/604C : 8D 04 61 | sta FP2+1
132 | 1 FPData.asm 129 | Code | 11 | | 2 | 00/604F : A5 EE | lda {$EC}+2 ;M2 (2)
133 | 1 FPData.asm 130 | Code | 11 | | 3 | 00/6051 : 8D 05 61 | sta FP2+2
134 | 1 FPData.asm 131 | Code | 11 | | 2 | 00/6054 : A5 EF | lda {$EC}+3 ;M2 (3)
135 | 1 FPData.asm 132 | Code | 11 | | 3 | 00/6056 : 8D 06 61 | sta FP2+3
136 | 1 FPData.asm 133 | Empty | 11 | | 0 | 00/6059 |
137 | 1 FPData.asm 134 | Comment | 11 | | 0 | 00/6059 | *** Download ***
138 | 1 FPData.asm 135 | Code | 11 | | 3 | 00/6059 : 20 D2 60 | jsr {ozunid_9}
139 | 1 FPData.asm 136 | Data | 11 | | 1 | 00/605C : 04 | dfb {4}
140 | 1 FPData.asm 137 | Data | 11 | | 2 | 00/605D : E7 60 | dw {ozunid_13}
141 | 1 FPData.asm 138 | Comment | 11 | | 0 | 00/605F | ** Set Unidisk Registers **
142 | 1 FPData.asm 139 | Comment | 11 | | 0 | 00/605F | ;First time execution
143 | 1 FPData.asm 140 | Code | 11 | | 2 | 00/605F : A9 00 | lda #$00 ; Target the first time entry point
144 | 1 FPData.asm 141 | Code | 11 | | 3 | 00/6061 : 8D F7 60 | sta LowPC_reg ; First time set init value of PC, just for the next execution
145 | 1 FPData.asm 142 | Comment | 11 | | 0 | 00/6064 | * The program begin to PC preset to $0500 *
146 | 1 FPData.asm 143 | Comment | 11 | | 0 | 00/6064 | *
147 | 1 FPData.asm 144 | Comment | 11 | | 0 | 00/6064 | ** Execute **
148 | 1 FPData.asm 145 | Code | 11 | | 3 | 00/6064 : 20 D2 60 | jsr {ozunid_9}
149 | 1 FPData.asm 146 | Data | 11 | | 1 | 00/6067 : 04 | dfb {4}
150 | 1 FPData.asm 147 | Data | 11 | | 2 | 00/6068 : EC 60 | dw {ozunid_14}
151 | 1 FPData.asm 148 | Comment | 11 | | 0 | 00/606A | ** Read **
152 | 1 FPData.asm 149 | Code | 11 | | 3 | 00/606A : 20 D2 60 | READ jsr {ozunid_9}
153 | 1 FPData.asm 150 | Data | 11 | | 1 | 00/606D : 00 | dfb {0}
154 | 1 FPData.asm 151 | Data | 11 | | 2 | 00/606E : D5 60 | dw {ozunid_10}
155 | 1 FPData.asm 152 | Code | 11 | | 2 | 00/6070 : B0 9D | bcs {ozunid_1}
156 | 1 FPData.asm 153 | Comment | 11 | | 0 | 00/6072 | *
157 | 1 FPData.asm 154 | Comment | 11 | | 0 | 00/6072 | **** Store Output results in //c ****
158 | 1 FPData.asm 155 | Empty | 11 | | 0 | 00/6072 |
159 | 1 FPData.asm 156 | Comment | 11 | | 0 | 00/6072 | * First time execute *
160 | 1 FPData.asm 157 | Code | 11 | | 3 | 00/6072 : AD DD 60 | lda UNIAcc_reg
161 | 1 FPData.asm 158 | Code | 11 | | 3 | 00/6075 : 8D 00 70 | sta {$7000}
162 | 1 FPData.asm 159 | Code | 11 | | 3 | 00/6078 : AD DE 60 | lda UNIX_reg
163 | 1 FPData.asm 160 | Code | 11 | | 3 | 00/607B : 8D 01 70 | sta {$7000}+1 ; Store the result
164 | 1 FPData.asm 161 | Code | 11 | | 3 | 00/607E : AD DF 60 | lda UNIY_reg
165 | 1 FPData.asm 162 | Code | 11 | | 3 | 00/6081 : 8D 02 70 | sta {$7000}+2
166 | 1 FPData.asm 163 | Empty | 11 | | 0 | 00/6084 |
167 | 1 FPData.asm 164 | Comment | 11 | | 0 | 00/6084 | ** Second time execute **
168 | 1 FPData.asm 165 | Code | 11 | | 2 | 00/6084 : A9 3C | lda #$3C ; Target the second time entry point
169 | 1 FPData.asm 166 | Code | 11 | | 3 | 00/6086 : 8D F7 60 | sta LowPC_reg ; Second time set new value of PC
170 | 1 FPData.asm 167 | Comment | 11 | | 0 | 00/6089 | ** Execute **
171 | 1 FPData.asm 168 | Code | 11 | | 3 | 00/6089 : 20 D2 60 | jsr {ozunid_9}
172 | 1 FPData.asm 169 | Data | 11 | | 1 | 00/608C : 04 | dfb {4}
173 | 1 FPData.asm 170 | Data | 11 | | 2 | 00/608D : EC 60 | dw {ozunid_14}
174 | 1 FPData.asm 171 | Comment | 11 | | 0 | 00/608F | ** Read **
175 | 1 FPData.asm 172 | Code | 11 | | 3 | 00/608F : 20 D2 60 | jsr {ozunid_9}
176 | 1 FPData.asm 173 | Data | 11 | | 1 | 00/6092 : 00 | dfb {0}
177 | 1 FPData.asm 174 | Data | 11 | | 2 | 00/6093 : D5 60 | dw {ozunid_10}
178 | 1 FPData.asm 175 | Comment | 11 | | 0 | 00/6095 | * bcs Error
179 | 1 FPData.asm 176 | Empty | 11 | | 0 | 00/6095 |
180 | 1 FPData.asm 177 | Comment | 11 | | 0 | 00/6095 | * Second time execute only to read the latest Byte of FP1*
181 | 1 FPData.asm 178 | Code | 11 | | 3 | 00/6095 : AD DD 60 | lda UNIAcc_reg
182 | 1 FPData.asm 179 | Code | 11 | | 3 | 00/6098 : 8D 03 70 | sta {$7000}+3
183 | 1 FPData.asm 180 | Comment | 11 | | 0 | 00/609B | *
184 | 1 FPData.asm 181 | Code | 11 | | 1 | 00/609B : 60 | PROGEND rts
185 | 1 FPData.asm 182 | Data | 11 | | 1 | 00/609C : 00 | CHKSUM chk
186 | 1 FPData.asm 183 | Comment | 11 | | 0 | 00/609D | ******************************************************
187 | 1 FPData.asm 184 | Empty | 11 | | 0 | 00/609D | ozunid_4
188 | 1 FPData.asm 184 | Equivalence | 11 | | 0 | 00/609D | FindPC equ ozunid_4
189 | 1 FPData.asm 185 | Comment | 11 | | 0 | 00/609D | *
190 | 1 FPData.asm 186 | Comment | 11 | | 0 | 00/609D | * Search slot 7 to slot 1 looking for signature bytes
191 | 1 FPData.asm 187 | Comment | 11 | | 0 | 00/609D | *
192 | 1 FPData.asm 188 | Code | 11 | | 2 | 00/609D : A2 07 | ldx #7 ;Do for seven slots
193 | 1 FPData.asm 189 | Code | 11 | | 2 | 00/609F : A9 C7 | lda #$C7
194 | 1 FPData.asm 190 | Code | 11 | | 2 | 00/60A1 : 85 07 | sta {$0007}
195 | 1 FPData.asm 191 | Code | 11 | | 2 | 00/60A3 : A9 00 | lda #$00
196 | 1 FPData.asm 192 | Code | 11 | | 2 | 00/60A5 : 85 06 | sta {$0006}
197 | 1 FPData.asm 193 | Comment | 11 | | 0 | 00/60A7 | *
198 | 1 FPData.asm 194 | Empty | 11 | | 0 | 00/60A7 | ozunid_5
199 | 1 FPData.asm 194 | Equivalence | 11 | | 0 | 00/60A7 | newslot equ ozunid_5
200 | 1 FPData.asm 195 | Code | 11 | | 2 | 00/60A7 : A0 07 | ldy #7
201 | 1 FPData.asm 196 | Comment | 11 | | 0 | 00/60A9 | *
202 | 1 FPData.asm 197 | Empty | 11 | | 0 | 00/60A9 | ozunid_6
203 | 1 FPData.asm 197 | Equivalence | 11 | | 0 | 00/60A9 | again equ ozunid_6
204 | 1 FPData.asm 198 | Code | 11 | | 2 | 00/60A9 : B1 06 | lda ({$0006}),y
205 | 1 FPData.asm 199 | Code | 11 | | 3 | 00/60AB : D9 CA 60 | cmp sigtab,y ;One for byte signature
206 | 1 FPData.asm 200 | Code | 11 | | 2 | 00/60AE : F0 07 | beq {ozunid_7} ;Found one signature byte
207 | 1 FPData.asm 201 | Code | 11 | | 2 | 00/60B0 : C6 07 | dec {$0007}
208 | 1 FPData.asm 202 | Code | 11 | | 1 | 00/60B2 : CA | dex
209 | 1 FPData.asm 203 | Code | 11 | | 2 | 00/60B3 : D0 F2 | bne {ozunid_5}
210 | 1 FPData.asm 204 | Comment | 11 | | 0 | 00/60B5 | *
211 | 1 FPData.asm 205 | Comment | 11 | | 0 | 00/60B5 | * if we get here, no PC find
212 | 1 FPData.asm 206 | Code | 11 | | 1 | 00/60B5 : 38 | sec
213 | 1 FPData.asm 207 | Code | 11 | | 1 | 00/60B6 : 60 | rts
214 | 1 FPData.asm 208 | Comment | 11 | | 0 | 00/60B7 | *
215 | 1 FPData.asm 209 | Comment | 11 | | 0 | 00/60B7 | * if we get here, no byte find on PC
216 | 1 FPData.asm 210 | Empty | 11 | | 0 | 00/60B7 | ozunid_7
217 | 1 FPData.asm 210 | Equivalence | 11 | | 0 | 00/60B7 | maybe equ ozunid_7
218 | 1 FPData.asm 211 | Code | 11 | | 1 | 00/60B7 : 88 | dey
219 | 1 FPData.asm 212 | Code | 11 | | 1 | 00/60B8 : 88 | dey ;if N=1 then all sig bytes OK
220 | 1 FPData.asm 213 | Code | 11 | | 2 | 00/60B9 : 10 EE | bpl {ozunid_6}
221 | 1 FPData.asm 214 | Comment | 11 | | 0 | 00/60BB | * Found PC interface. Set up call address.
222 | 1 FPData.asm 215 | Comment | 11 | | 0 | 00/60BB | * we already have high byte ($CN), we need low byte
223 | 1 FPData.asm 216 | Comment | 11 | | 0 | 00/60BB | *
224 | 1 FPData.asm 217 | Empty | 11 | | 0 | 00/60BB | ozunid_8
225 | 1 FPData.asm 217 | Equivalence | 11 | | 0 | 00/60BB | foundPC equ ozunid_8
226 | 1 FPData.asm 218 | Code | 11 | | 2 | 00/60BB : A9 FF | lda #$FF
227 | 1 FPData.asm 219 | Code | 11 | | 2 | 00/60BD : 85 06 | sta {$0006}
228 | 1 FPData.asm 220 | Code | 11 | | 2 | 00/60BF : A0 00 | ldy #0 ;For indirect load
229 | 1 FPData.asm 221 | Code | 11 | | 2 | 00/60C1 : B1 06 | lda ({$0006}),y ;Get the byte
230 | 1 FPData.asm 222 | Comment | 11 | | 0 | 00/60C3 | *
231 | 1 FPData.asm 223 | Comment | 11 | | 0 | 00/60C3 | * Now the Acc has the low oreder ProDOS entry point.
232 | 1 FPData.asm 224 | Comment | 11 | | 0 | 00/60C3 | * The PC entry is three locations past this ...
233 | 1 FPData.asm 225 | Comment | 11 | | 0 | 00/60C3 | *
234 | 1 FPData.asm 226 | Code | 11 | | 1 | 00/60C3 : 18 | clc
235 | 1 FPData.asm 227 | Code | 11 | | 2 | 00/60C4 : 69 03 | adc #3
236 | 1 FPData.asm 228 | Code | 11 | | 2 | 00/60C6 : 85 06 | sta {$0006}
237 | 1 FPData.asm 229 | Comment | 11 | | 0 | 00/60C8 | *
238 | 1 FPData.asm 230 | Comment | 11 | | 0 | 00/60C8 | * Now ZPTempL has PC entry point.
239 | 1 FPData.asm 231 | Comment | 11 | | 0 | 00/60C8 | * Return with carry clear.
240 | 1 FPData.asm 232 | Comment | 11 | | 0 | 00/60C8 | *
241 | 1 FPData.asm 233 | Code | 11 | | 1 | 00/60C8 : 18 | clc
242 | 1 FPData.asm 234 | Code | 11 | | 1 | 00/60C9 : 60 | rts
243 | 1 FPData.asm 235 | Comment | 11 | | 0 | 00/60CA | ***********************************************************
244 | 1 FPData.asm 236 | Comment | 11 | | 0 | 00/60CA | *
245 | 1 FPData.asm 237 | Comment | 11 | | 0 | 00/60CA | * There are the PC signature bytes in their relative order.
246 | 1 FPData.asm 238 | Comment | 11 | | 0 | 00/60CA | * The $FF bytes are filler bytes and are not compared.
247 | 1 FPData.asm 239 | Comment | 11 | | 0 | 00/60CA | *
248 | 1 FPData.asm 240 | Data | 11 | | 4 | 00/60CA : FF 20 FF 00 | sigtab dfb $FF,$20,$FF,$00
249 | 1 FPData.asm 241 | Data | 11 | | 4 | 00/60CE : FF 03 FF 00 | dfb $FF,$03,$FF,$00
250 | 1 FPData.asm 242 | Comment | 11 | | 0 | 00/60D2 | *
251 | 1 FPData.asm 243 | Empty | 11 | | 0 | 00/60D2 | ozunid_9
252 | 1 FPData.asm 243 | Equivalence | 11 | | 0 | 00/60D2 | Dispatch equ ozunid_9
253 | 1 FPData.asm 244 | Code | 11 | | 3 | 00/60D2 : 6C 06 00 | jmp ({$0006}) ;Simulate an indirect JSR to PC
254 | 1 FPData.asm 245 | Comment | 11 | | 0 | 00/60D5 | *
255 | 1 FPData.asm 246 | Comment | 11 | | 0 | 00/60D5 | *** Status Parameter Set for UNI ***
256 | 1 FPData.asm 247 | Empty | 11 | | 0 | 00/60D5 | ozunid_10
257 | 1 FPData.asm 247 | Equivalence | 11 | | 0 | 00/60D5 | DParms equ ozunid_10
258 | 1 FPData.asm 248 | Data | 11 | | 1 | 00/60D5 : 03 | DPParmsCt dfb 3 ;Status calls have three parameters
259 | 1 FPData.asm 249 | Data | 11 | | 1 | 00/60D6 : 01 | DPUnit dfb 1
260 | 1 FPData.asm 250 | Data | 11 | | 2 | 00/60D7 : DA 60 | DPBuffer dw {ozunid_11}
261 | 1 FPData.asm 251 | Data | 11 | | 1 | 00/60D9 : 05 | DPStatCode dfb {5}
262 | 1 FPData.asm 252 | Comment | 11 | | 0 | 00/60DA | *
263 | 1 FPData.asm 253 | Comment | 11 | | 0 | 00/60DA | *
264 | 1 FPData.asm 254 | Comment | 11 | | 0 | 00/60DA | *
265 | 1 FPData.asm 255 | Comment | 11 | | 0 | 00/60DA | *** Status List UNI ***
266 | 1 FPData.asm 256 | Empty | 11 | | 0 | 00/60DA | ozunid_11
267 | 1 FPData.asm 256 | Equivalence | 11 | | 0 | 00/60DA | UNI equ ozunid_11
268 | 1 FPData.asm 257 | Data | 11 | | 1 | 00/60DA : 00 | dfb 0
269 | 1 FPData.asm 258 | Data | 11 | | 1 | 00/60DB : 00 | UNIError dfb 0
270 | 1 FPData.asm 259 | Data | 11 | | 1 | 00/60DC : 00 | UNIRetries dfb 0
271 | 1 FPData.asm 260 | Data | 11 | | 1 | 00/60DD : 00 | UNIAcc_reg dfb 0
272 | 1 FPData.asm 261 | Data | 11 | | 1 | 00/60DE : 00 | UNIX_reg dfb 0
273 | 1 FPData.asm 262 | Data | 11 | | 1 | 00/60DF : 00 | UNIY_reg dfb 0
274 | 1 FPData.asm 263 | Data | 11 | | 1 | 00/60E0 : 00 | UNIP_val dfb 0
275 | 1 FPData.asm 264 | Data | 11 | | 1 | 00/60E1 : 00 | HHH dfb 0
276 | 1 FPData.asm 265 | Comment | 11 | | 0 | 00/60E2 | *
277 | 1 FPData.asm 266 | Comment | 11 | | 0 | 00/60E2 | *** Set Address ***
278 | 1 FPData.asm 267 | Empty | 11 | | 0 | 00/60E2 | ozunid_12
279 | 1 FPData.asm 267 | Equivalence | 11 | | 0 | 00/60E2 | SET_ADD equ ozunid_12
280 | 1 FPData.asm 268 | Data | 11 | | 1 | 00/60E2 : 03 | dfb 3
281 | 1 FPData.asm 269 | Data | 11 | | 1 | 00/60E3 : 01 | dfb 1
282 | 1 FPData.asm 270 | Data | 11 | | 2 | 00/60E4 : F9 60 | dw {ozunid_16}
283 | 1 FPData.asm 271 | Data | 11 | | 1 | 00/60E6 : 06 | dfb {6}
284 | 1 FPData.asm 272 | Comment | 11 | | 0 | 00/60E7 | *
285 | 1 FPData.asm 273 | Comment | 11 | | 0 | 00/60E7 | *** Download ***
286 | 1 FPData.asm 274 | Empty | 11 | | 0 | 00/60E7 | ozunid_13
287 | 1 FPData.asm 274 | Equivalence | 11 | | 0 | 00/60E7 | DOWNLOAD equ ozunid_13
288 | 1 FPData.asm 275 | Data | 11 | | 1 | 00/60E7 : 03 | dfb 3
289 | 1 FPData.asm 276 | Data | 11 | | 1 | 00/60E8 : 01 | dfb 1
290 | 1 FPData.asm 277 | Data | 11 | | 2 | 00/60E9 : FD 60 | dw {ozunid_17}
291 | 1 FPData.asm 278 | Data | 11 | | 1 | 00/60EB : 07 | dfb {7}
292 | 1 FPData.asm 279 | Comment | 11 | | 0 | 00/60EC | *
293 | 1 FPData.asm 280 | Comment | 11 | | 0 | 00/60EC | *** Execute ***
294 | 1 FPData.asm 281 | Empty | 11 | | 0 | 00/60EC | ozunid_14
295 | 1 FPData.asm 281 | Equivalence | 11 | | 0 | 00/60EC | EXE equ ozunid_14
296 | 1 FPData.asm 282 | Data | 11 | | 1 | 00/60EC : 03 | dfb 3
297 | 1 FPData.asm 283 | Data | 11 | | 1 | 00/60ED : 01 | dfb 1
298 | 1 FPData.asm 284 | Data | 11 | | 2 | 00/60EE : F1 60 | dw {ozunid_15}
299 | 1 FPData.asm 285 | Data | 11 | | 1 | 00/60F0 : 05 | dfb {5}
300 | 1 FPData.asm 286 | Comment | 11 | | 0 | 00/60F1 | *
301 | 1 FPData.asm 287 | Comment | 11 | | 0 | 00/60F1 | ******** CONTROL LISTS ********
302 | 1 FPData.asm 288 | Comment | 11 | | 0 | 00/60F1 | *
303 | 1 FPData.asm 289 | Comment | 11 | | 0 | 00/60F1 | *
304 | 1 FPData.asm 290 | Comment | 11 | | 0 | 00/60F1 | *** Execute ***
305 | 1 FPData.asm 291 | Empty | 11 | | 0 | 00/60F1 | ozunid_15
306 | 1 FPData.asm 291 | Equivalence | 11 | | 0 | 00/60F1 | CNTL_LIST2 equ ozunid_15
307 | 1 FPData.asm 292 | Data | 11 | | 1 | 00/60F1 : 06 | Clow_byte dfb $06
308 | 1 FPData.asm 293 | Data | 11 | | 1 | 00/60F2 : 00 | Chigh_byte dfb $00
309 | 1 FPData.asm 294 | Data | 11 | | 1 | 00/60F3 : 00 | AccValue dfb $00 ; Init Value Unidisk Accumulator Register
310 | 1 FPData.asm 295 | Data | 11 | | 1 | 00/60F4 : 00 | X_reg dfb $00 ; Init Value Unidisk X Register
311 | 1 FPData.asm 296 | Data | 11 | | 1 | 00/60F5 : 00 | Y_reg dfb $00 ; Init Value Unidisk Y Register
312 | 1 FPData.asm 297 | Data | 11 | | 1 | 00/60F6 : 00 | ProStatus dfb $00 ; Init Value Unidisk Status Register
313 | 1 FPData.asm 298 | Data | 11 | | 1 | 00/60F7 : 00 | LowPC_reg dfb $00 ; Init Value Unidisk Program Counter $0500 at eny dowload
314 | 1 FPData.asm 299 | Data | 11 | | 1 | 00/60F8 : 05 | HighPC_reg dfb $05 ; $05 first execution, $3C second execution
315 | 1 FPData.asm 300 | Comment | 11 | | 0 | 00/60F9 | *
316 | 1 FPData.asm 301 | Comment | 11 | | 0 | 00/60F9 | *** Set Address ***
317 | 1 FPData.asm 302 | Empty | 11 | | 0 | 00/60F9 | ozunid_16
318 | 1 FPData.asm 302 | Equivalence | 11 | | 0 | 00/60F9 | CNTL_LIST3 equ ozunid_16
319 | 1 FPData.asm 303 | Data | 11 | | 1 | 00/60F9 : 02 | CountL_byte dfb $02
320 | 1 FPData.asm 304 | Data | 11 | | 1 | 00/60FA : 00 | CountH_byte dfb $00
321 | 1 FPData.asm 305 | Data | 11 | | 1 | 00/60FB : 2D | LByte_Addr dfb $2D ; ORG of Unidisk program, set begin data address $062D
322 | 1 FPData.asm 306 | Data | 11 | | 1 | 00/60FC : 06 | HByte_Addr dfb $06
323 | 1 FPData.asm 307 | Comment | 11 | | 0 | 00/60FD | *
324 | 1 FPData.asm 308 | Comment | 11 | | 0 | 00/60FD | *** Download ***
325 | 1 FPData.asm 309 | Empty | 11 | | 0 | 00/60FD | ozunid_17
326 | 1 FPData.asm 309 | Equivalence | 11 | | 0 | 00/60FD | CNTL_LIST4 equ ozunid_17
327 | 1 FPData.asm 310 | Data | 11 | | 1 | 00/60FD : 08 | LenghtL_byte dfb $08 ;<----- Lenght of Unidisk program Lo - Byte 312 byte
328 | 1 FPData.asm 311 | Data | 11 | | 1 | 00/60FE : 00 | LenghtH_byte dfb $00 ;<----- Lenght of Unidisk program Hi Byte
329 | 1 FPData.asm 312 | Comment | 11 | | 0 | 00/60FF | *
330 | 1 FPData.asm 313 | Comment | 11 | | 0 | 00/60FF | **************** Start UNIDISK Program ****************
331 | 1 FPData.asm 314 | Comment | 11 | | 0 | 00/60FF | *
332 | 1 FPData.asm 315 | Empty | 11 | | 0 | 00/60FF |
333 | 1 FPData.asm 316 | Comment | 11 | | 0 | 00/60FF | ** Input Dynamic Data append in the end of Unidisk routine **
334 | 1 FPData.asm 317 | Data | 11 | | 1 | 00/60FF : 00 | FP1 dfb $00
335 | 1 FPData.asm 318 | Data | 11 | | 1 | 00/6100 : 00 | dfb $00
336 | 1 FPData.asm 319 | Data | 11 | | 1 | 00/6101 : 00 | dfb $00
337 | 1 FPData.asm 320 | Data | 11 | | 1 | 00/6102 : 00 | dfb $00
338 | 1 FPData.asm 321 | Comment | 11 | | 0 | 00/6103 | *
339 | 1 FPData.asm 322 | Data | 11 | | 1 | 00/6103 : 00 | FP2 dfb $00
340 | 1 FPData.asm 323 | Data | 11 | | 1 | 00/6104 : 00 | dfb $00
341 | 1 FPData.asm 324 | Data | 11 | | 1 | 00/6105 : 00 | dfb $00
342 | 1 FPData.asm 325 | Data | 11 | | 1 | 00/6106 : 00 | dfb $00
343 | 1 FPData.asm 326 | Comment | 11 | | 0 | 00/6107 | **************** End UNIDISK Program ****************
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

BIN
AppleII/FP f(x)/FPMain Normal file

Binary file not shown.

520
AppleII/FP f(x)/FPMain.asm Normal file
View File

@ -0,0 +1,520 @@
*
* Unidisk 3.5 Driver MAIN <alfa>
*
* 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 <rigreco.grc@gmail.com>.
*
* 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 <http://www.gnu.org/licenses/>.
*
*
* @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<E THEN DON'T RESTORE M2.
STA M2+3,X
DIV4 INX ;NEXT LESS SIGNIFICANT BYTE.
BNE DIV3 ;LOOP UNTIL DONE.
ROL M1+2
ROL M1+1 ;ROLL QUOTIENT LEFT, CARRY INTO LSB
ROL M1
ASL M2+2
ROL M2+1 ;SHIFT DIVIDEND LEFT
ROL M2
BCS OVFL ;OVFL IS DUE TO UNNORMED DIVISOR
DEY ;NEXT DIVIDE ITERATION.
BNE DIV1 ;LOOP UNTIL DONE 23 ITERATIONS.
BEQ MDEND ;NORM. QUOTIENT AND CORRECT SIGN.
MD2 STX M1+2
STX M1+1 ;CLEAR MANT1 (3 BYTES) FOR MUL/DIV.
STX M1
BCS OVCHK ;IF CALC. SET CARRY,CHECK FOR OVFL
BMI MD3 ;IF NEG THEN NO UNDERFLOW.
PLA ;POP ONE RETURN LEVEL.
PLA
BCC NORMX ;CLEAR X1 AND RETURN.
MD3 EOR #$80 ;COMPLEMENT SIGN BIT OF EXPONENT.
STA X1 ;STORE IT.
LDY #$17 ;COUNT 24 MUL/23 DIV ITERATIONS.
RTS ;RETURN.
OVCHK BPL MD3 ;IF POSITIVE EXP THEN NO OVFL.
OVFL JMP OVLOC
* ORG $F63D
FIX1 JSR RTAR
FIX LDA X1 ; <------------------------------ fp to int
BPL UNDFL
CMP #$8E
BNE FIX1
BIT M1
BPL FIXRTS
LDA M1+2
BEQ FIXRTS
INC M1+1
BNE FIXRTS
INC M1
FIXRTS RTS
UNDFL LDA #$0
STA M1
STA M1+1
RTS
** Input Dynamic Data append in the end of Unidisk routine **
FP1 dfb $00
dfb $00
dfb $00
dfb $00
*
FP2 dfb $00
dfb $00
dfb $00
dfb $00

View File

@ -0,0 +1,547 @@
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
1 | 1 FPMain.asm 1 | Comment | 11 | | 0 | 00/8000 | *
2 | 1 FPMain.asm 2 | Comment | 11 | | 0 | 00/8000 | * Unidisk 3.5 Driver MAIN <alfa>
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 <rigreco.grc@gmail.com>.
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 <http://www.gnu.org/licenses/>.
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<E THEN DON'T RESTORE M2.
485 | 1 FPMain.asm 466 | Code | 11 | | 2 | 00/05DA : 95 C5 | STA {$C2}+3,X
486 | 1 FPMain.asm 467 | Code | 11 | | 1 | 00/05DC : E8 | DIV4 INX ;NEXT LESS SIGNIFICANT BYTE.
487 | 1 FPMain.asm 468 | Code | 11 | | 2 | 00/05DD : D0 F8 | BNE DIV3 ;LOOP UNTIL DONE.
488 | 1 FPMain.asm 469 | Code | 11 | | 2 | 00/05DF : 26 C8 | ROL {$C6}+2
489 | 1 FPMain.asm 470 | Code | 11 | | 2 | 00/05E1 : 26 C7 | ROL {$C6}+1 ;ROLL QUOTIENT LEFT, CARRY INTO LSB
490 | 1 FPMain.asm 471 | Code | 11 | | 2 | 00/05E3 : 26 C6 | ROL {$C6}
491 | 1 FPMain.asm 472 | Code | 11 | | 2 | 00/05E5 : 06 C4 | ASL {$C2}+2
492 | 1 FPMain.asm 473 | Code | 11 | | 2 | 00/05E7 : 26 C3 | ROL {$C2}+1 ;SHIFT DIVIDEND LEFT
493 | 1 FPMain.asm 474 | Code | 11 | | 2 | 00/05E9 : 26 C2 | ROL {$C2}
494 | 1 FPMain.asm 475 | Code | 11 | | 2 | 00/05EB : B0 1C | BCS OVFL ;OVFL IS DUE TO UNNORMED DIVISOR
495 | 1 FPMain.asm 476 | Code | 11 | | 1 | 00/05ED : 88 | DEY ;NEXT DIVIDE ITERATION.
496 | 1 FPMain.asm 477 | Code | 11 | | 2 | 00/05EE : D0 DA | BNE DIV1 ;LOOP UNTIL DONE 23 ITERATIONS.
497 | 1 FPMain.asm 478 | Code | 11 | | 2 | 00/05F0 : F0 BE | BEQ MDEND ;NORM. QUOTIENT AND CORRECT SIGN.
498 | 1 FPMain.asm 479 | Code | 11 | | 2 | 00/05F2 : 86 C8 | MD2 STX {$C6}+2
499 | 1 FPMain.asm 480 | Code | 11 | | 2 | 00/05F4 : 86 C7 | STX {$C6}+1 ;CLEAR MANT1 (3 BYTES) FOR MUL/DIV.
500 | 1 FPMain.asm 481 | Code | 11 | | 2 | 00/05F6 : 86 C6 | STX {$C6}
501 | 1 FPMain.asm 482 | Code | 11 | | 2 | 00/05F8 : B0 0D | BCS OVCHK ;IF CALC. SET CARRY,CHECK FOR OVFL
502 | 1 FPMain.asm 483 | Code | 11 | | 2 | 00/05FA : 30 04 | BMI MD3 ;IF NEG THEN NO UNDERFLOW.
503 | 1 FPMain.asm 484 | Code | 11 | | 1 | 00/05FC : 68 | PLA ;POP ONE RETURN LEVEL.
504 | 1 FPMain.asm 485 | Code | 11 | | 1 | 00/05FD : 68 | PLA
505 | 1 FPMain.asm 486 | Code | 11 | | 2 | 00/05FE : 90 B2 | BCC NORMX ;CLEAR X1 AND RETURN.
506 | 1 FPMain.asm 487 | Code | 11 | | 2 | 00/0600 : 49 80 | MD3 EOR #$80 ;COMPLEMENT SIGN BIT OF EXPONENT.
507 | 1 FPMain.asm 488 | Code | 11 | | 2 | 00/0602 : 85 C5 | STA {$C5} ;STORE IT.
508 | 1 FPMain.asm 489 | Code | 11 | | 2 | 00/0604 : A0 17 | LDY #$17 ;COUNT 24 MUL/23 DIV ITERATIONS.
509 | 1 FPMain.asm 490 | Code | 11 | | 1 | 00/0606 : 60 | RTS ;RETURN.
510 | 1 FPMain.asm 491 | Code | 11 | | 2 | 00/0607 : 10 F7 | OVCHK BPL MD3 ;IF POSITIVE EXP THEN NO OVFL.
511 | 1 FPMain.asm 492 | Code | 11 | | 3 | 00/0609 : 4C 10 0C | OVFL JMP {$C10}
512 | 1 FPMain.asm 493 | Comment | 11 | | 0 | 00/060C | * ORG $F63D
513 | 1 FPMain.asm 494 | Code | 11 | | 3 | 00/060C : 20 8D 05 | FIX1 JSR RTAR
514 | 1 FPMain.asm 495 | Code | 11 | | 2 | 00/060F : A5 C5 | FIX LDA {$C5} ; <------------------------------ fp to int
515 | 1 FPMain.asm 496 | Code | 11 | | 2 | 00/0611 : 10 13 | BPL UNDFL
516 | 1 FPMain.asm 497 | Code | 11 | | 2 | 00/0613 : C9 8E | CMP #$8E
517 | 1 FPMain.asm 498 | Code | 11 | | 2 | 00/0615 : D0 F5 | BNE FIX1
518 | 1 FPMain.asm 499 | Code | 11 | | 2 | 00/0617 : 24 C6 | BIT {$C6}
519 | 1 FPMain.asm 500 | Code | 11 | | 2 | 00/0619 : 10 0A | BPL FIXRTS
520 | 1 FPMain.asm 501 | Code | 11 | | 2 | 00/061B : A5 C8 | LDA {$C6}+2
521 | 1 FPMain.asm 502 | Code | 11 | | 2 | 00/061D : F0 06 | BEQ FIXRTS
522 | 1 FPMain.asm 503 | Code | 11 | | 2 | 00/061F : E6 C7 | INC {$C6}+1
523 | 1 FPMain.asm 504 | Code | 11 | | 2 | 00/0621 : D0 02 | BNE FIXRTS
524 | 1 FPMain.asm 505 | Code | 11 | | 2 | 00/0623 : E6 C6 | INC {$C6}
525 | 1 FPMain.asm 506 | Code | 11 | | 1 | 00/0625 : 60 | FIXRTS RTS
526 | 1 FPMain.asm 507 | Code | 11 | | 2 | 00/0626 : A9 00 | UNDFL LDA #$0
527 | 1 FPMain.asm 508 | Code | 11 | | 2 | 00/0628 : 85 C6 | STA {$C6}
528 | 1 FPMain.asm 509 | Code | 11 | | 2 | 00/062A : 85 C7 | STA {$C6}+1
529 | 1 FPMain.asm 510 | Code | 11 | | 1 | 00/062C : 60 | RTS
530 | 1 FPMain.asm 511 | Comment | 11 | | 0 | 00/062D | ** Input Dynamic Data append in the end of Unidisk routine **
531 | 1 FPMain.asm 512 | Data | 11 | | 1 | 00/062D : 00 | FP1 dfb $00
532 | 1 FPMain.asm 513 | Data | 11 | | 1 | 00/062E : 00 | dfb $00
533 | 1 FPMain.asm 514 | Data | 11 | | 1 | 00/062F : 00 | dfb $00
534 | 1 FPMain.asm 515 | Data | 11 | | 1 | 00/0630 : 00 | dfb $00
535 | 1 FPMain.asm 516 | Comment | 11 | | 0 | 00/0631 | *
536 | 1 FPMain.asm 517 | Data | 11 | | 1 | 00/0631 : 00 | FP2 dfb $00
537 | 1 FPMain.asm 518 | Data | 11 | | 1 | 00/0632 : 00 | dfb $00
538 | 1 FPMain.asm 519 | Data | 11 | | 1 | 00/0633 : 00 | dfb $00
539 | 1 FPMain.asm 520 | Data | 11 | | 1 | 00/0634 : 00 | dfb $00
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

11
AppleII/FP f(x)/UNI5.bas Normal file
View File

@ -0,0 +1,11 @@
2 PRINT CHR$ (4);"BLOAD FPMain"
5 PRINT CHR$ (4);"BLOAD FPConv"
15 CALL 24576
17 PRINT CHR$ (4);"BLOAD FPData"
18 HGR2 : HCOLOR= 3
20 FOR X = - 10 TO 10 STEP .2
25 CALL 32768,X
30 CALL 24576
35 CALL 32831,Y
40 HPLOT X * 5 + 140,Y + 10
50 NEXT

View File

@ -0,0 +1,3 @@
FPData=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)
FPConv=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)
FPMain=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)

10
AppleII/FP f(x)/unix.bas Normal file
View File

@ -0,0 +1,10 @@
2 PRINT CHR$ (4);"BLOAD FPMain"
5 PRINT CHR$ (4);"BLOAD FPConv"
27 CALL 24576
50 PRINT CHR$ (4);"BLOAD FPData"
55 INPUT "N1 ? ";X
60 CALL 32768,X
65 CALL 24576
70 CALL 32831,Y
80 PRINT Y
90 GOTO 55