------+-------------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code ------+-------------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- 1 | 1 Unidrive4.asm 1 | Comment | 11 | | 0 | 00/8000 | * 2 | 1 Unidrive4.asm 2 | Comment | 11 | | 0 | 00/8000 | * Unidisk 3.5 Driver 3 | 1 Unidrive4.asm 3 | Comment | 11 | | 0 | 00/8000 | * 4 | 1 Unidrive4.asm 4 | Comment | 11 | | 0 | 00/8000 | * The target of this project is to use the Unidisk 3.5 drive to perform 5 | 1 Unidrive4.asm 5 | Comment | 11 | | 0 | 00/8000 | * specific numerical routines (integers and floating point numbers) 6 | 1 Unidrive4.asm 6 | Comment | 11 | | 0 | 00/8000 | * calculation in order to use it as a Apple II co-processor unit. 7 | 1 Unidrive4.asm 7 | Comment | 11 | | 0 | 00/8000 | * 8 | 1 Unidrive4.asm 8 | Comment | 11 | | 0 | 00/8000 | * Copyright (C) 2015 Riccardo Greco . 9 | 1 Unidrive4.asm 9 | Comment | 11 | | 0 | 00/8000 | * 10 | 1 Unidrive4.asm 10 | Comment | 11 | | 0 | 00/8000 | * This program is free software: you can redistribute it and/or modify 11 | 1 Unidrive4.asm 11 | Comment | 11 | | 0 | 00/8000 | * it under the terms of the GNU General Public License as published by 12 | 1 Unidrive4.asm 12 | Comment | 11 | | 0 | 00/8000 | * the Free Software Foundation, either version 3 of the License, or 13 | 1 Unidrive4.asm 13 | Comment | 11 | | 0 | 00/8000 | * (at your option) any later version. 14 | 1 Unidrive4.asm 14 | Comment | 11 | | 0 | 00/8000 | * This program is distributed in the hope that it will be useful, 15 | 1 Unidrive4.asm 15 | Comment | 11 | | 0 | 00/8000 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | 1 Unidrive4.asm 16 | Comment | 11 | | 0 | 00/8000 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | 1 Unidrive4.asm 17 | Comment | 11 | | 0 | 00/8000 | * GNU General Public License for more details. 18 | 1 Unidrive4.asm 18 | Comment | 11 | | 0 | 00/8000 | * You should have received a copy of the GNU General Public License 19 | 1 Unidrive4.asm 19 | Comment | 11 | | 0 | 00/8000 | * along with this program. If not, see . 20 | 1 Unidrive4.asm 20 | Comment | 11 | | 0 | 00/8000 | * 21 | 1 Unidrive4.asm 21 | Comment | 11 | | 0 | 00/8000 | * 22 | 1 Unidrive4.asm 22 | Comment | 11 | | 0 | 00/8000 | * @com.wudsn.ide.asm.hardware=APPLE2 23 | 1 Unidrive4.asm 23 | Comment | 11 | | 0 | 00/8000 | * 24 | 1 Unidrive4.asm 24 | Comment | 11 | | 0 | 00/8000 | * Protocol Converter Call 25 | 1 Unidrive4.asm 25 | Directive | 11 | | 0 | 00/8000 | XC 26 | 1 Unidrive4.asm 26 | Equivalence | 11 | | 0 | 00/8000 | ZPTempL equ $0006 ;Temporary zero page storage 27 | 1 Unidrive4.asm 27 | Equivalence | 11 | | 0 | 00/8000 | ZPTempH equ $0007 28 | 1 Unidrive4.asm 28 | Comment | 11 | | 0 | 00/8000 | ** Zero page storage ** 29 | 1 Unidrive4.asm 29 | Equivalence | 11 | | 0 | 00/8000 | N1 equ $FA ;25 4 Byte FP FA--FD (FP1) 30 | 1 Unidrive4.asm 30 | Equivalence | 11 | | 0 | 00/8000 | N2 equ $EC ;27 4 Byte FP EC--EF (FP2) 31 | 1 Unidrive4.asm 31 | Comment | 11 | | 0 | 00/8000 | ; RSLT equ $1D ;29 32 | 1 Unidrive4.asm 32 | Comment | 11 | | 0 | 00/8000 | *** Monitor routines *** 33 | 1 Unidrive4.asm 33 | Equivalence | 11 | | 0 | 00/8000 | COut equ $FDED ;Console output ASCII 34 | 1 Unidrive4.asm 34 | Equivalence | 11 | | 0 | 00/8000 | CROut equ $FD8E ;Carriage return 35 | 1 Unidrive4.asm 35 | Comment | 11 | | 0 | 00/8000 | ** Command Code ** 36 | 1 Unidrive4.asm 36 | Equivalence | 11 | | 0 | 00/8000 | StatusCmd equ 0 37 | 1 Unidrive4.asm 37 | Comment | 11 | | 0 | 00/8000 | ** Status Code ** 38 | 1 Unidrive4.asm 38 | Comment | 11 | | 0 | 00/8000 | * StatusDIB equ 3 39 | 1 Unidrive4.asm 39 | Equivalence | 11 | | 0 | 00/8000 | StatusUNI equ 5 40 | 1 Unidrive4.asm 40 | Comment | 11 | | 0 | 00/8000 | * 41 | 1 Unidrive4.asm 41 | Equivalence | 11 | | 0 | 00/8000 | ControlCmd equ 4 42 | 1 Unidrive4.asm 42 | Comment | 11 | | 0 | 00/8000 | ** Control Codes ** 43 | 1 Unidrive4.asm 43 | Equivalence | 11 | | 0 | 00/8000 | Eject equ 4 44 | 1 Unidrive4.asm 44 | Equivalence | 11 | | 0 | 00/8000 | Run equ 5 45 | 1 Unidrive4.asm 45 | Equivalence | 11 | | 0 | 00/8000 | SetDWLoad equ 6 46 | 1 Unidrive4.asm 46 | Equivalence | 11 | | 0 | 00/8000 | DWLoad equ 7 47 | 1 Unidrive4.asm 47 | Comment | 11 | | 0 | 00/8000 | * 48 | 1 Unidrive4.asm 48 | Directive | 11 | | 0 | 00/8000 | org $8000 49 | 1 Unidrive4.asm 49 | Comment | 11 | | 0 | 00/8000 | ***************************************************** 50 | 1 Unidrive4.asm 50 | Empty | 11 | | 0 | 00/8000 | 51 | 1 Unidrive4.asm 51 | Comment | 11 | | 0 | 00/8000 | * 52 | 1 Unidrive4.asm 52 | Comment | 11 | | 0 | 00/8000 | * Find a Protocol Converter in one of the slots. 53 | 1 Unidrive4.asm 53 | Code | 11 | | 3 | 00/8000 : 20 99 80 | START jsr {ozunid_4} 54 | 1 Unidrive4.asm 54 | Code | 11 | | 2 | 00/8003 : B0 10 | bcs {ozunid_1} 55 | 1 Unidrive4.asm 55 | Comment | 11 | | 0 | 00/8005 | *** Eject *** 56 | 1 Unidrive4.asm 56 | Code | 11 | | 3 | 00/8005 : 20 CE 80 | jsr {ozunid_9} 57 | 1 Unidrive4.asm 57 | Data | 11 | | 1 | 00/8008 : 04 | dfb {4} 58 | 1 Unidrive4.asm 58 | Data | 11 | | 2 | 00/8009 : ED 80 | dw {ozunid_15} 59 | 1 Unidrive4.asm 59 | Comment | 11 | | 0 | 00/800B | *** Set Address *** 60 | 1 Unidrive4.asm 60 | Code | 11 | | 3 | 00/800B : 20 CE 80 | jsr {ozunid_9} 61 | 1 Unidrive4.asm 61 | Data | 11 | | 1 | 00/800E : 04 | dfb {4} 62 | 1 Unidrive4.asm 62 | Data | 11 | | 2 | 00/800F : DE 80 | dw {ozunid_12} 63 | 1 Unidrive4.asm 63 | Comment | 11 | | 0 | 00/8011 | * 64 | 1 Unidrive4.asm 64 | Code | 11 | | 3 | 00/8011 : 20 37 80 | jsr EXEC ; Jump the Error routine 65 | 1 Unidrive4.asm 65 | Code | 11 | | 1 | 00/8014 : 60 | rts 66 | 1 Unidrive4.asm 66 | Comment | 11 | | 0 | 00/8015 | ********************************************* 67 | 1 Unidrive4.asm 67 | Empty | 11 | | 0 | 00/8015 | ozunid_1 68 | 1 Unidrive4.asm 67 | Equivalence | 11 | | 0 | 00/8015 | Error equ ozunid_1 69 | 1 Unidrive4.asm 68 | Comment | 11 | | 0 | 00/8015 | * 70 | 1 Unidrive4.asm 69 | Comment | 11 | | 0 | 00/8015 | * There is either no PC around, or there was no give message 71 | 1 Unidrive4.asm 70 | Comment | 11 | | 0 | 00/8015 | * 72 | 1 Unidrive4.asm 71 | Code | 11 | | 2 | 00/8015 : A2 00 | ldx #0 73 | 1 Unidrive4.asm 72 | Empty | 11 | | 0 | 00/8017 | ozunid_2 74 | 1 Unidrive4.asm 72 | Equivalence | 11 | | 0 | 00/8017 | err1 equ ozunid_2 75 | 1 Unidrive4.asm 73 | Code | 11 | | 3 | 00/8017 : BD 23 80 | lda Message,x 76 | 1 Unidrive4.asm 74 | Code | 11 | | 2 | 00/801A : F0 06 | beq {ozunid_3} 77 | 1 Unidrive4.asm 75 | Code | 11 | | 3 | 00/801C : 20 ED FD | jsr {$FDED} 78 | 1 Unidrive4.asm 76 | Code | 11 | | 1 | 00/801F : E8 | inx 79 | 1 Unidrive4.asm 77 | Code | 11 | | 2 | 00/8020 : D0 F5 | bne {ozunid_2} 80 | 1 Unidrive4.asm 78 | Comment | 11 | | 0 | 00/8022 | * 81 | 1 Unidrive4.asm 79 | Empty | 11 | | 0 | 00/8022 | ozunid_3 82 | 1 Unidrive4.asm 79 | Equivalence | 11 | | 0 | 00/8022 | errout equ ozunid_3 83 | 1 Unidrive4.asm 80 | Code | 11 | | 1 | 00/8022 : 60 | rts 84 | 1 Unidrive4.asm 81 | Comment | 11 | | 0 | 00/8023 | * 85 | 1 Unidrive4.asm 82 | Data | 11 | | 18 | 00/8023 : 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 Unidrive4.asm 83 | Data | 11 | | 2 | 00/8035 : 8D 00 | dfb $8D,0 87 | 1 Unidrive4.asm 84 | Comment | 11 | | 0 | 00/8037 | ********************************************* 88 | 1 Unidrive4.asm 85 | Comment | 11 | | 0 | 00/8037 | * 89 | 1 Unidrive4.asm 86 | Empty | 11 | | 0 | 00/8037 | 90 | 1 Unidrive4.asm 87 | Comment | 11 | | 0 | 00/8037 | ** Set the Input Value first in Dynamic data ** 91 | 1 Unidrive4.asm 88 | Comment | 11 | | 0 | 00/8037 | ** 4 Byte N1 to FP1 ** 92 | 1 Unidrive4.asm 89 | Code | 11 | | 2 | 00/8037 : A5 FA | EXEC lda {$FA} ;X1 93 | 1 Unidrive4.asm 90 | Code | 11 | | 3 | 00/8039 : 8D 2F 82 | sta $822F ; Absolute addressing 94 | 1 Unidrive4.asm 91 | Code | 11 | | 2 | 00/803C : A5 FB | lda {$FA}+1 ;M1 (1) 95 | 1 Unidrive4.asm 92 | Code | 11 | | 3 | 00/803E : 8D 30 82 | sta $8230 96 | 1 Unidrive4.asm 93 | Code | 11 | | 2 | 00/8041 : A5 FC | lda {$FA}+2 ;M1 (2) 97 | 1 Unidrive4.asm 94 | Code | 11 | | 3 | 00/8043 : 8D 31 82 | sta $8231 98 | 1 Unidrive4.asm 95 | Code | 11 | | 2 | 00/8046 : A5 FD | lda {$FA}+3 ;M1 (3) 99 | 1 Unidrive4.asm 96 | Code | 11 | | 3 | 00/8048 : 8D 32 82 | sta $8232 100 | 1 Unidrive4.asm 97 | Empty | 11 | | 0 | 00/804B | 101 | 1 Unidrive4.asm 98 | Comment | 11 | | 0 | 00/804B | ** 4 Byte N2 to FP2 ** 102 | 1 Unidrive4.asm 99 | Code | 11 | | 2 | 00/804B : A5 EC | lda {$EC} ;X2 103 | 1 Unidrive4.asm 100 | Code | 11 | | 3 | 00/804D : 8D 33 82 | sta $8233 104 | 1 Unidrive4.asm 101 | Code | 11 | | 2 | 00/8050 : A5 ED | lda {$EC}+1 ;M2 (1) 105 | 1 Unidrive4.asm 102 | Code | 11 | | 3 | 00/8052 : 8D 34 82 | sta $8234 106 | 1 Unidrive4.asm 103 | Code | 11 | | 2 | 00/8055 : A5 EE | lda {$EC}+2 ;M2 (2) 107 | 1 Unidrive4.asm 104 | Code | 11 | | 3 | 00/8057 : 8D 35 82 | sta $8235 108 | 1 Unidrive4.asm 105 | Code | 11 | | 2 | 00/805A : A5 EF | lda {$EC}+3 ;M2 (3) 109 | 1 Unidrive4.asm 106 | Code | 11 | | 3 | 00/805C : 8D 36 82 | sta $8236 110 | 1 Unidrive4.asm 107 | Empty | 11 | | 0 | 00/805F | 111 | 1 Unidrive4.asm 108 | Comment | 11 | | 0 | 00/805F | *** Download *** 112 | 1 Unidrive4.asm 109 | Code | 11 | | 3 | 00/805F : 20 CE 80 | jsr {ozunid_9} 113 | 1 Unidrive4.asm 110 | Data | 11 | | 1 | 00/8062 : 04 | dfb {4} 114 | 1 Unidrive4.asm 111 | Data | 11 | | 2 | 00/8063 : E3 80 | dw {ozunid_13} 115 | 1 Unidrive4.asm 112 | Comment | 11 | | 0 | 00/8065 | ** Set Unidisk Registers ** 116 | 1 Unidrive4.asm 113 | Comment | 11 | | 0 | 00/8065 | * lda #01 ;First time 117 | 1 Unidrive4.asm 114 | Comment | 11 | | 0 | 00/8065 | * sta UNIAcc_reg 118 | 1 Unidrive4.asm 115 | Comment | 11 | | 0 | 00/8065 | * The program begin to PC preset to $0500 * 119 | 1 Unidrive4.asm 116 | Comment | 11 | | 0 | 00/8065 | * 120 | 1 Unidrive4.asm 117 | Comment | 11 | | 0 | 00/8065 | ** Execute ** 121 | 1 Unidrive4.asm 118 | Code | 11 | | 3 | 00/8065 : 20 CE 80 | jsr {ozunid_9} 122 | 1 Unidrive4.asm 119 | Data | 11 | | 1 | 00/8068 : 04 | dfb {4} 123 | 1 Unidrive4.asm 120 | Data | 11 | | 2 | 00/8069 : E8 80 | dw {ozunid_14} 124 | 1 Unidrive4.asm 121 | Comment | 11 | | 0 | 00/806B | ** Read ** 125 | 1 Unidrive4.asm 122 | Code | 11 | | 3 | 00/806B : 20 CE 80 | READ jsr {ozunid_9} 126 | 1 Unidrive4.asm 123 | Data | 11 | | 1 | 00/806E : 00 | dfb {0} 127 | 1 Unidrive4.asm 124 | Data | 11 | | 2 | 00/806F : D1 80 | dw {ozunid_10} 128 | 1 Unidrive4.asm 125 | Code | 11 | | 2 | 00/8071 : B0 A2 | bcs {ozunid_1} 129 | 1 Unidrive4.asm 126 | Comment | 11 | | 0 | 00/8073 | * 130 | 1 Unidrive4.asm 127 | Comment | 11 | | 0 | 00/8073 | **** Store Output results in //c **** 131 | 1 Unidrive4.asm 128 | Empty | 11 | | 0 | 00/8073 | 132 | 1 Unidrive4.asm 129 | Comment | 11 | | 0 | 00/8073 | * First time execute * 133 | 1 Unidrive4.asm 130 | Code | 11 | | 3 | 00/8073 : AD D9 80 | lda UNIAcc_reg 134 | 1 Unidrive4.asm 131 | Code | 11 | | 2 | 00/8076 : 85 FA | sta {$FA} 135 | 1 Unidrive4.asm 132 | Code | 11 | | 3 | 00/8078 : AD DA 80 | lda UNIX_reg 136 | 1 Unidrive4.asm 133 | Code | 11 | | 2 | 00/807B : 85 FB | sta {$FA}+1 ; Store the result 137 | 1 Unidrive4.asm 134 | Code | 11 | | 3 | 00/807D : AD DB 80 | lda UNIY_reg 138 | 1 Unidrive4.asm 135 | Code | 11 | | 2 | 00/8080 : 85 FC | sta {$FA}+2 139 | 1 Unidrive4.asm 136 | Empty | 11 | | 0 | 00/8082 | 140 | 1 Unidrive4.asm 137 | Comment | 11 | | 0 | 00/8082 | ** Second time execute ** 141 | 1 Unidrive4.asm 138 | Code | 11 | | 2 | 00/8082 : A9 3C | lda #$3C ; Target the secont time entry point 142 | 1 Unidrive4.asm 139 | Code | 11 | | 3 | 00/8084 : 8D FA 80 | sta LowPC_reg ; Second time set new value of PC 143 | 1 Unidrive4.asm 140 | Comment | 11 | | 0 | 00/8087 | ** Execute ** 144 | 1 Unidrive4.asm 141 | Code | 11 | | 3 | 00/8087 : 20 CE 80 | jsr {ozunid_9} 145 | 1 Unidrive4.asm 142 | Data | 11 | | 1 | 00/808A : 04 | dfb {4} 146 | 1 Unidrive4.asm 143 | Data | 11 | | 2 | 00/808B : E8 80 | dw {ozunid_14} 147 | 1 Unidrive4.asm 144 | Comment | 11 | | 0 | 00/808D | ** Read ** 148 | 1 Unidrive4.asm 145 | Code | 11 | | 3 | 00/808D : 20 CE 80 | jsr {ozunid_9} 149 | 1 Unidrive4.asm 146 | Data | 11 | | 1 | 00/8090 : 00 | dfb {0} 150 | 1 Unidrive4.asm 147 | Data | 11 | | 2 | 00/8091 : D1 80 | dw {ozunid_10} 151 | 1 Unidrive4.asm 148 | Comment | 11 | | 0 | 00/8093 | * bcs Error 152 | 1 Unidrive4.asm 149 | Empty | 11 | | 0 | 00/8093 | 153 | 1 Unidrive4.asm 150 | Comment | 11 | | 0 | 00/8093 | * Second time execute only to read the latest Byte of FP1* 154 | 1 Unidrive4.asm 151 | Code | 11 | | 3 | 00/8093 : AD D9 80 | lda UNIAcc_reg 155 | 1 Unidrive4.asm 152 | Code | 11 | | 2 | 00/8096 : 85 FD | sta {$FA}+3 156 | 1 Unidrive4.asm 153 | Comment | 11 | | 0 | 00/8098 | * 157 | 1 Unidrive4.asm 154 | Code | 11 | | 1 | 00/8098 : 60 | rts 158 | 1 Unidrive4.asm 155 | Empty | 11 | | 0 | 00/8099 | 159 | 1 Unidrive4.asm 156 | Comment | 11 | | 0 | 00/8099 | ****************************************************** 160 | 1 Unidrive4.asm 157 | Empty | 11 | | 0 | 00/8099 | ozunid_4 161 | 1 Unidrive4.asm 157 | Equivalence | 11 | | 0 | 00/8099 | FindPC equ ozunid_4 162 | 1 Unidrive4.asm 158 | Comment | 11 | | 0 | 00/8099 | * 163 | 1 Unidrive4.asm 159 | Comment | 11 | | 0 | 00/8099 | * Search slot 7 to slot 1 looking for signature bytes 164 | 1 Unidrive4.asm 160 | Comment | 11 | | 0 | 00/8099 | * 165 | 1 Unidrive4.asm 161 | Code | 11 | | 2 | 00/8099 : A2 07 | ldx #7 ;Do for seven slots 166 | 1 Unidrive4.asm 162 | Code | 11 | | 2 | 00/809B : A9 C7 | lda #$C7 167 | 1 Unidrive4.asm 163 | Code | 11 | | 2 | 00/809D : 85 07 | sta {$0007} 168 | 1 Unidrive4.asm 164 | Code | 11 | | 2 | 00/809F : A9 00 | lda #$00 169 | 1 Unidrive4.asm 165 | Code | 11 | | 2 | 00/80A1 : 85 06 | sta {$0006} 170 | 1 Unidrive4.asm 166 | Comment | 11 | | 0 | 00/80A3 | * 171 | 1 Unidrive4.asm 167 | Empty | 11 | | 0 | 00/80A3 | ozunid_5 172 | 1 Unidrive4.asm 167 | Equivalence | 11 | | 0 | 00/80A3 | newslot equ ozunid_5 173 | 1 Unidrive4.asm 168 | Code | 11 | | 2 | 00/80A3 : A0 07 | ldy #7 174 | 1 Unidrive4.asm 169 | Comment | 11 | | 0 | 00/80A5 | * 175 | 1 Unidrive4.asm 170 | Empty | 11 | | 0 | 00/80A5 | ozunid_6 176 | 1 Unidrive4.asm 170 | Equivalence | 11 | | 0 | 00/80A5 | again equ ozunid_6 177 | 1 Unidrive4.asm 171 | Code | 11 | | 2 | 00/80A5 : B1 06 | lda ({$0006}),y 178 | 1 Unidrive4.asm 172 | Code | 11 | | 3 | 00/80A7 : D9 C6 80 | cmp sigtab,y ;One for byte signature 179 | 1 Unidrive4.asm 173 | Code | 11 | | 2 | 00/80AA : F0 07 | beq {ozunid_7} ;Found one signature byte 180 | 1 Unidrive4.asm 174 | Code | 11 | | 2 | 00/80AC : C6 07 | dec {$0007} 181 | 1 Unidrive4.asm 175 | Code | 11 | | 1 | 00/80AE : CA | dex 182 | 1 Unidrive4.asm 176 | Code | 11 | | 2 | 00/80AF : D0 F2 | bne {ozunid_5} 183 | 1 Unidrive4.asm 177 | Comment | 11 | | 0 | 00/80B1 | * 184 | 1 Unidrive4.asm 178 | Comment | 11 | | 0 | 00/80B1 | * if we get here, no PC find 185 | 1 Unidrive4.asm 179 | Code | 11 | | 1 | 00/80B1 : 38 | sec 186 | 1 Unidrive4.asm 180 | Code | 11 | | 1 | 00/80B2 : 60 | rts 187 | 1 Unidrive4.asm 181 | Comment | 11 | | 0 | 00/80B3 | * 188 | 1 Unidrive4.asm 182 | Comment | 11 | | 0 | 00/80B3 | * if we get here, no byte find on PC 189 | 1 Unidrive4.asm 183 | Empty | 11 | | 0 | 00/80B3 | ozunid_7 190 | 1 Unidrive4.asm 183 | Equivalence | 11 | | 0 | 00/80B3 | maybe equ ozunid_7 191 | 1 Unidrive4.asm 184 | Code | 11 | | 1 | 00/80B3 : 88 | dey 192 | 1 Unidrive4.asm 185 | Code | 11 | | 1 | 00/80B4 : 88 | dey ;if N=1 then all sig bytes OK 193 | 1 Unidrive4.asm 186 | Code | 11 | | 2 | 00/80B5 : 10 EE | bpl {ozunid_6} 194 | 1 Unidrive4.asm 187 | Comment | 11 | | 0 | 00/80B7 | * Found PC interface. Set up call address. 195 | 1 Unidrive4.asm 188 | Comment | 11 | | 0 | 00/80B7 | * we already have high byte ($CN), we need low byte 196 | 1 Unidrive4.asm 189 | Comment | 11 | | 0 | 00/80B7 | * 197 | 1 Unidrive4.asm 190 | Empty | 11 | | 0 | 00/80B7 | ozunid_8 198 | 1 Unidrive4.asm 190 | Equivalence | 11 | | 0 | 00/80B7 | foundPC equ ozunid_8 199 | 1 Unidrive4.asm 191 | Code | 11 | | 2 | 00/80B7 : A9 FF | lda #$FF 200 | 1 Unidrive4.asm 192 | Code | 11 | | 2 | 00/80B9 : 85 06 | sta {$0006} 201 | 1 Unidrive4.asm 193 | Code | 11 | | 2 | 00/80BB : A0 00 | ldy #0 ;For indirect load 202 | 1 Unidrive4.asm 194 | Code | 11 | | 2 | 00/80BD : B1 06 | lda ({$0006}),y ;Get the byte 203 | 1 Unidrive4.asm 195 | Comment | 11 | | 0 | 00/80BF | * 204 | 1 Unidrive4.asm 196 | Comment | 11 | | 0 | 00/80BF | * Now the Acc has the low oreder ProDOS entry point. 205 | 1 Unidrive4.asm 197 | Comment | 11 | | 0 | 00/80BF | * The PC entry is three locations past this ... 206 | 1 Unidrive4.asm 198 | Comment | 11 | | 0 | 00/80BF | * 207 | 1 Unidrive4.asm 199 | Code | 11 | | 1 | 00/80BF : 18 | clc 208 | 1 Unidrive4.asm 200 | Code | 11 | | 2 | 00/80C0 : 69 03 | adc #3 209 | 1 Unidrive4.asm 201 | Code | 11 | | 2 | 00/80C2 : 85 06 | sta {$0006} 210 | 1 Unidrive4.asm 202 | Comment | 11 | | 0 | 00/80C4 | * 211 | 1 Unidrive4.asm 203 | Comment | 11 | | 0 | 00/80C4 | * Now ZPTempL has PC entry point. 212 | 1 Unidrive4.asm 204 | Comment | 11 | | 0 | 00/80C4 | * Return with carry clear. 213 | 1 Unidrive4.asm 205 | Comment | 11 | | 0 | 00/80C4 | * 214 | 1 Unidrive4.asm 206 | Code | 11 | | 1 | 00/80C4 : 18 | clc 215 | 1 Unidrive4.asm 207 | Code | 11 | | 1 | 00/80C5 : 60 | rts 216 | 1 Unidrive4.asm 208 | Comment | 11 | | 0 | 00/80C6 | *********************************************************** 217 | 1 Unidrive4.asm 209 | Comment | 11 | | 0 | 00/80C6 | * 218 | 1 Unidrive4.asm 210 | Comment | 11 | | 0 | 00/80C6 | * There are the PC signature bytes in their relative order. 219 | 1 Unidrive4.asm 211 | Comment | 11 | | 0 | 00/80C6 | * The $FF bytes are filler bytes and are not compared. 220 | 1 Unidrive4.asm 212 | Comment | 11 | | 0 | 00/80C6 | * 221 | 1 Unidrive4.asm 213 | Data | 11 | | 4 | 00/80C6 : FF 20 FF 00 | sigtab dfb $FF,$20,$FF,$00 222 | 1 Unidrive4.asm 214 | Data | 11 | | 4 | 00/80CA : FF 03 FF 00 | dfb $FF,$03,$FF,$00 223 | 1 Unidrive4.asm 215 | Comment | 11 | | 0 | 00/80CE | * 224 | 1 Unidrive4.asm 216 | Empty | 11 | | 0 | 00/80CE | ozunid_9 225 | 1 Unidrive4.asm 216 | Equivalence | 11 | | 0 | 00/80CE | Dispatch equ ozunid_9 226 | 1 Unidrive4.asm 217 | Code | 11 | | 3 | 00/80CE : 6C 06 00 | jmp ({$0006}) ;Simulate an indirect JSR to PC 227 | 1 Unidrive4.asm 218 | Comment | 11 | | 0 | 00/80D1 | * 228 | 1 Unidrive4.asm 219 | Comment | 11 | | 0 | 00/80D1 | *** Status Parameter Set for UNI *** 229 | 1 Unidrive4.asm 220 | Empty | 11 | | 0 | 00/80D1 | ozunid_10 230 | 1 Unidrive4.asm 220 | Equivalence | 11 | | 0 | 00/80D1 | DParms equ ozunid_10 231 | 1 Unidrive4.asm 221 | Data | 11 | | 1 | 00/80D1 : 03 | DPParmsCt dfb 3 ;Status calls have three parameters 232 | 1 Unidrive4.asm 222 | Data | 11 | | 1 | 00/80D2 : 01 | DPUnit dfb 1 233 | 1 Unidrive4.asm 223 | Data | 11 | | 2 | 00/80D3 : D6 80 | DPBuffer dw {ozunid_11} 234 | 1 Unidrive4.asm 224 | Data | 11 | | 1 | 00/80D5 : 05 | DPStatCode dfb {5} 235 | 1 Unidrive4.asm 225 | Comment | 11 | | 0 | 00/80D6 | * 236 | 1 Unidrive4.asm 226 | Comment | 11 | | 0 | 00/80D6 | * 237 | 1 Unidrive4.asm 227 | Comment | 11 | | 0 | 00/80D6 | * 238 | 1 Unidrive4.asm 228 | Comment | 11 | | 0 | 00/80D6 | *** Status List UNI *** 239 | 1 Unidrive4.asm 229 | Empty | 11 | | 0 | 00/80D6 | ozunid_11 240 | 1 Unidrive4.asm 229 | Equivalence | 11 | | 0 | 00/80D6 | UNI equ ozunid_11 241 | 1 Unidrive4.asm 230 | Data | 11 | | 1 | 00/80D6 : 00 | dfb 0 242 | 1 Unidrive4.asm 231 | Data | 11 | | 1 | 00/80D7 : 00 | UNIError dfb 0 243 | 1 Unidrive4.asm 232 | Data | 11 | | 1 | 00/80D8 : 00 | UNIRetries dfb 0 244 | 1 Unidrive4.asm 233 | Data | 11 | | 1 | 00/80D9 : 00 | UNIAcc_reg dfb 0 245 | 1 Unidrive4.asm 234 | Data | 11 | | 1 | 00/80DA : 00 | UNIX_reg dfb 0 246 | 1 Unidrive4.asm 235 | Data | 11 | | 1 | 00/80DB : 00 | UNIY_reg dfb 0 247 | 1 Unidrive4.asm 236 | Data | 11 | | 1 | 00/80DC : 00 | UNIP_val dfb 0 248 | 1 Unidrive4.asm 237 | Data | 11 | | 1 | 00/80DD : 00 | HHH dfb 0 249 | 1 Unidrive4.asm 238 | Comment | 11 | | 0 | 00/80DE | * 250 | 1 Unidrive4.asm 239 | Comment | 11 | | 0 | 00/80DE | *** Set Address *** 251 | 1 Unidrive4.asm 240 | Empty | 11 | | 0 | 00/80DE | ozunid_12 252 | 1 Unidrive4.asm 240 | Equivalence | 11 | | 0 | 00/80DE | SET_ADD equ ozunid_12 253 | 1 Unidrive4.asm 241 | Data | 11 | | 1 | 00/80DE : 03 | dfb 3 254 | 1 Unidrive4.asm 242 | Data | 11 | | 1 | 00/80DF : 01 | dfb 1 255 | 1 Unidrive4.asm 243 | Data | 11 | | 2 | 00/80E0 : FC 80 | dw {ozunid_18} 256 | 1 Unidrive4.asm 244 | Data | 11 | | 1 | 00/80E2 : 06 | dfb {6} 257 | 1 Unidrive4.asm 245 | Comment | 11 | | 0 | 00/80E3 | * 258 | 1 Unidrive4.asm 246 | Comment | 11 | | 0 | 00/80E3 | *** Download *** 259 | 1 Unidrive4.asm 247 | Empty | 11 | | 0 | 00/80E3 | ozunid_13 260 | 1 Unidrive4.asm 247 | Equivalence | 11 | | 0 | 00/80E3 | DOWNLOAD equ ozunid_13 261 | 1 Unidrive4.asm 248 | Data | 11 | | 1 | 00/80E3 : 03 | dfb 3 262 | 1 Unidrive4.asm 249 | Data | 11 | | 1 | 00/80E4 : 01 | dfb 1 263 | 1 Unidrive4.asm 250 | Data | 11 | | 2 | 00/80E5 : 00 81 | dw {ozunid_19} 264 | 1 Unidrive4.asm 251 | Data | 11 | | 1 | 00/80E7 : 07 | dfb {7} 265 | 1 Unidrive4.asm 252 | Comment | 11 | | 0 | 00/80E8 | * 266 | 1 Unidrive4.asm 253 | Comment | 11 | | 0 | 00/80E8 | *** Execute *** 267 | 1 Unidrive4.asm 254 | Empty | 11 | | 0 | 00/80E8 | ozunid_14 268 | 1 Unidrive4.asm 254 | Equivalence | 11 | | 0 | 00/80E8 | EXE equ ozunid_14 269 | 1 Unidrive4.asm 255 | Data | 11 | | 1 | 00/80E8 : 03 | dfb 3 270 | 1 Unidrive4.asm 256 | Data | 11 | | 1 | 00/80E9 : 01 | dfb 1 271 | 1 Unidrive4.asm 257 | Data | 11 | | 2 | 00/80EA : F4 80 | dw {ozunid_17} 272 | 1 Unidrive4.asm 258 | Data | 11 | | 1 | 00/80EC : 05 | dfb {5} 273 | 1 Unidrive4.asm 259 | Comment | 11 | | 0 | 00/80ED | *** Eject *** 274 | 1 Unidrive4.asm 260 | Empty | 11 | | 0 | 00/80ED | ozunid_15 275 | 1 Unidrive4.asm 260 | Equivalence | 11 | | 0 | 00/80ED | E_JECT equ ozunid_15 276 | 1 Unidrive4.asm 261 | Data | 11 | | 1 | 00/80ED : 03 | dfb 3 277 | 1 Unidrive4.asm 262 | Data | 11 | | 1 | 00/80EE : 01 | dfb 1 278 | 1 Unidrive4.asm 263 | Data | 11 | | 2 | 00/80EF : F2 80 | dw {ozunid_16} 279 | 1 Unidrive4.asm 264 | Data | 11 | | 1 | 00/80F1 : 04 | dfb {4} 280 | 1 Unidrive4.asm 265 | Comment | 11 | | 0 | 00/80F2 | * 281 | 1 Unidrive4.asm 266 | Comment | 11 | | 0 | 00/80F2 | ******** CONTROL LISTS ******** 282 | 1 Unidrive4.asm 267 | Comment | 11 | | 0 | 00/80F2 | * 283 | 1 Unidrive4.asm 268 | Comment | 11 | | 0 | 00/80F2 | * 284 | 1 Unidrive4.asm 269 | Comment | 11 | | 0 | 00/80F2 | *** Eject *** 285 | 1 Unidrive4.asm 270 | Empty | 11 | | 0 | 00/80F2 | ozunid_16 286 | 1 Unidrive4.asm 270 | Equivalence | 11 | | 0 | 00/80F2 | CNTL_LIST1 equ ozunid_16 287 | 1 Unidrive4.asm 271 | Data | 11 | | 2 | 00/80F2 : 00 00 | dw $0000 288 | 1 Unidrive4.asm 272 | Comment | 11 | | 0 | 00/80F4 | * 289 | 1 Unidrive4.asm 273 | Comment | 11 | | 0 | 00/80F4 | *** Execute *** 290 | 1 Unidrive4.asm 274 | Empty | 11 | | 0 | 00/80F4 | ozunid_17 291 | 1 Unidrive4.asm 274 | Equivalence | 11 | | 0 | 00/80F4 | CNTL_LIST2 equ ozunid_17 292 | 1 Unidrive4.asm 275 | Data | 11 | | 1 | 00/80F4 : 06 | Clow_byte dfb $06 293 | 1 Unidrive4.asm 276 | Data | 11 | | 1 | 00/80F5 : 00 | Chigh_byte dfb $00 294 | 1 Unidrive4.asm 277 | Data | 11 | | 1 | 00/80F6 : 00 | AccValue dfb $00 ; Init Value Unidisk Accumulator Register 295 | 1 Unidrive4.asm 278 | Data | 11 | | 1 | 00/80F7 : 00 | X_reg dfb $00 ; Init Value Unidisk X Register 296 | 1 Unidrive4.asm 279 | Data | 11 | | 1 | 00/80F8 : 00 | Y_reg dfb $00 ; Init Value Unidisk Y Register 297 | 1 Unidrive4.asm 280 | Data | 11 | | 1 | 00/80F9 : 00 | ProStatus dfb $00 ; Init Value Unidisk Status Register 298 | 1 Unidrive4.asm 281 | Data | 11 | | 1 | 00/80FA : 00 | LowPC_reg dfb $00 ; Init Value Unidisk Program Counter $0500 at eny dowload 299 | 1 Unidrive4.asm 282 | Data | 11 | | 1 | 00/80FB : 05 | HighPC_reg dfb $05 ; $05 first execution, $3C second execution 300 | 1 Unidrive4.asm 283 | Comment | 11 | | 0 | 00/80FC | * 301 | 1 Unidrive4.asm 284 | Comment | 11 | | 0 | 00/80FC | *** Set Address *** 302 | 1 Unidrive4.asm 285 | Empty | 11 | | 0 | 00/80FC | ozunid_18 303 | 1 Unidrive4.asm 285 | Equivalence | 11 | | 0 | 00/80FC | CNTL_LIST3 equ ozunid_18 304 | 1 Unidrive4.asm 286 | Data | 11 | | 1 | 00/80FC : 02 | CountL_byte dfb $02 305 | 1 Unidrive4.asm 287 | Data | 11 | | 1 | 00/80FD : 00 | CountH_byte dfb $00 306 | 1 Unidrive4.asm 288 | Data | 11 | | 1 | 00/80FE : 00 | LByte_Addr dfb $00 ; ORG of Unidisk program, set begin program address $0500 307 | 1 Unidrive4.asm 289 | Data | 11 | | 1 | 00/80FF : 05 | HByte_Addr dfb $05 308 | 1 Unidrive4.asm 290 | Comment | 11 | | 0 | 00/8100 | * 309 | 1 Unidrive4.asm 291 | Comment | 11 | | 0 | 00/8100 | *** Download *** 310 | 1 Unidrive4.asm 292 | Empty | 11 | | 0 | 00/8100 | ozunid_19 311 | 1 Unidrive4.asm 292 | Equivalence | 11 | | 0 | 00/8100 | CNTL_LIST4 equ ozunid_19 312 | 1 Unidrive4.asm 293 | Data | 11 | | 1 | 00/8100 : 34 | LenghtL_byte dfb $34 ;<----- Lenght of Unidisk program Lo - Byte 312 byte 313 | 1 Unidrive4.asm 294 | Data | 11 | | 1 | 00/8101 : 01 | LenghtH_byte dfb $01 ;<----- Lenght of Unidisk program Hi Byte 314 | 1 Unidrive4.asm 295 | Comment | 11 | | 0 | 00/8102 | * 315 | 1 Unidrive4.asm 296 | Comment | 11 | | 0 | 00/8102 | **************** Start UNIDISK Program **************** 316 | 1 Unidrive4.asm 297 | Comment | 11 | | 0 | 00/8102 | * 317 | 1 Unidrive4.asm 298 | Directive | 11 | | 0 | 00/8102 | org $0500 ; Start Unidisk program address 318 | 1 Unidrive4.asm 299 | Empty | 11 | | 0 | 00/0500 | 319 | 1 Unidrive4.asm 300 | Equivalence | 11 | | 0 | 00/0500 | SIGN EQU $C0 ;$EB ; $F3 320 | 1 Unidrive4.asm 301 | Empty | 11 | | 0 | 00/0500 | 321 | 1 Unidrive4.asm 302 | Comment | 11 | | 0 | 00/0500 | ** FP2 4 Bytes ** 322 | 1 Unidrive4.asm 303 | Equivalence | 11 | | 0 | 00/0500 | X2 EQU $C1 ;$EC ; $F4 323 | 1 Unidrive4.asm 304 | Equivalence | 11 | | 0 | 00/0500 | M2 EQU $C2 ;$ED ; $F5 - $F7 324 | 1 Unidrive4.asm 305 | Empty | 11 | | 0 | 00/0500 | 325 | 1 Unidrive4.asm 306 | Comment | 11 | | 0 | 00/0500 | ** FP1 4 Bytes + E extension ** 326 | 1 Unidrive4.asm 307 | Equivalence | 11 | | 0 | 00/0500 | X1 EQU $C5 ;$FA ; $F8 327 | 1 Unidrive4.asm 308 | Equivalence | 11 | | 0 | 00/0500 | M1 EQU $C6 ;$FB ; $F9 - $FB 328 | 1 Unidrive4.asm 309 | Equivalence | 11 | | 0 | 00/0500 | E EQU $C9 ;$FE ; $FC 329 | 1 Unidrive4.asm 310 | Empty | 11 | | 0 | 00/0500 | 330 | 1 Unidrive4.asm 311 | Equivalence | 11 | | 0 | 00/0500 | OVLOC EQU $C10 ;$3F5 ;Overflow routine is not implemented at now) 331 | 1 Unidrive4.asm 312 | Empty | 11 | | 0 | 00/0500 | 332 | 1 Unidrive4.asm 313 | Comment | 11 | | 0 | 00/0500 | * 333 | 1 Unidrive4.asm 314 | Comment | 11 | | 0 | 00/0500 | ** Main program ** 334 | 1 Unidrive4.asm 315 | Comment | 11 | | 0 | 00/0500 | * 335 | 1 Unidrive4.asm 316 | Comment | 11 | | 0 | 00/0500 | ** Input data to Zero Page ** 336 | 1 Unidrive4.asm 317 | Empty | 11 | | 0 | 00/0500 | 337 | 1 Unidrive4.asm 318 | Comment | 11 | | 0 | 00/0500 | ** FP1 ** 338 | 1 Unidrive4.asm 319 | Code | 11 | | 3 | 00/0500 : AD 2D 06 | lda FP1 339 | 1 Unidrive4.asm 320 | Code | 11 | | 2 | 00/0503 : 85 C5 | sta {$C5} 340 | 1 Unidrive4.asm 321 | Empty | 11 | | 0 | 00/0505 | 341 | 1 Unidrive4.asm 322 | Code | 11 | | 3 | 00/0505 : AD 2E 06 | lda FP1+1 342 | 1 Unidrive4.asm 323 | Code | 11 | | 2 | 00/0508 : 85 C6 | sta {$C6} 343 | 1 Unidrive4.asm 324 | Code | 11 | | 3 | 00/050A : AD 2F 06 | lda FP1+2 344 | 1 Unidrive4.asm 325 | Code | 11 | | 2 | 00/050D : 85 C7 | sta {$C6}+1 345 | 1 Unidrive4.asm 326 | Code | 11 | | 3 | 00/050F : AD 30 06 | lda FP1+3 346 | 1 Unidrive4.asm 327 | Code | 11 | | 2 | 00/0512 : 85 C8 | sta {$C6}+2 347 | 1 Unidrive4.asm 328 | Empty | 11 | | 0 | 00/0514 | 348 | 1 Unidrive4.asm 329 | Comment | 11 | | 0 | 00/0514 | ** FP2 ** 349 | 1 Unidrive4.asm 330 | Code | 11 | | 3 | 00/0514 : AD 31 06 | lda FP2 350 | 1 Unidrive4.asm 331 | Code | 11 | | 2 | 00/0517 : 85 C1 | sta {$C1} 351 | 1 Unidrive4.asm 332 | Empty | 11 | | 0 | 00/0519 | 352 | 1 Unidrive4.asm 333 | Code | 11 | | 3 | 00/0519 : AD 32 06 | lda FP2+1 353 | 1 Unidrive4.asm 334 | Code | 11 | | 2 | 00/051C : 85 C2 | sta {$C2} 354 | 1 Unidrive4.asm 335 | Code | 11 | | 3 | 00/051E : AD 33 06 | lda FP2+2 355 | 1 Unidrive4.asm 336 | Code | 11 | | 2 | 00/0521 : 85 C3 | sta {$C2}+1 356 | 1 Unidrive4.asm 337 | Code | 11 | | 3 | 00/0523 : AD 34 06 | lda FP2+3 357 | 1 Unidrive4.asm 338 | Code | 11 | | 2 | 00/0526 : 85 C4 | sta {$C2}+2 358 | 1 Unidrive4.asm 339 | Empty | 11 | | 0 | 00/0528 | 359 | 1 Unidrive4.asm 340 | Comment | 11 | | 0 | 00/0528 | ************************** Target Function *********************** 360 | 1 Unidrive4.asm 341 | Comment | 11 | | 0 | 00/0528 | * Y=N1+N2 * 361 | 1 Unidrive4.asm 342 | Comment | 11 | | 0 | 00/0528 | ****************************************************************** 362 | 1 Unidrive4.asm 343 | Comment | 11 | | 0 | 00/0528 | * 363 | 1 Unidrive4.asm 344 | Comment | 11 | | 0 | 00/0528 | ** Simple ADD ** 364 | 1 Unidrive4.asm 345 | Code | 11 | | 3 | 00/0528 : 20 7E 05 | jsr FADD ; Call FP routine 365 | 1 Unidrive4.asm 346 | Empty | 11 | | 0 | 00/052B | 366 | 1 Unidrive4.asm 347 | Comment | 11 | | 0 | 00/052B | *** Output Data result FP1 to Unidisk registers First Time first 3 Byte out *** 367 | 1 Unidrive4.asm 348 | Code | 11 | | 2 | 00/052B : A5 C5 | lda {$C5} 368 | 1 Unidrive4.asm 349 | Code | 11 | | 2 | 00/052D : A6 C6 | ldx {$C6} 369 | 1 Unidrive4.asm 350 | Code | 11 | | 2 | 00/052F : A4 C7 | ldy {$C6}+1 370 | 1 Unidrive4.asm 351 | Empty | 11 | | 0 | 00/0531 | 371 | 1 Unidrive4.asm 352 | Code | 11 | | 1 | 00/0531 : 60 | rts 372 | 1 Unidrive4.asm 353 | Comment | 11 | | 0 | 00/0532 | *** Output Data result FP1 to Unidisk registers Second Time latest 1 Byte out *** 373 | 1 Unidrive4.asm 354 | Code | 11 | | 2 | 00/0532 : A5 C8 | SECOND lda {$C6}+2 ; Entry point by Program Counter set 374 | 1 Unidrive4.asm 355 | Empty | 11 | | 0 | 00/0534 | 375 | 1 Unidrive4.asm 356 | Code | 11 | | 1 | 00/0534 : 60 | rts 376 | 1 Unidrive4.asm 357 | Comment | 11 | | 0 | 00/0535 | *************************************************** 377 | 1 Unidrive4.asm 358 | Comment | 11 | | 0 | 00/0535 | * 378 | 1 Unidrive4.asm 359 | Comment | 11 | | 0 | 00/0535 | ***************** FP Routine ***************** 379 | 1 Unidrive4.asm 360 | Comment | 11 | | 0 | 00/0535 | * 380 | 1 Unidrive4.asm 361 | Comment | 11 | | 0 | 00/0535 | *********************** 381 | 1 Unidrive4.asm 362 | Comment | 11 | | 0 | 00/0535 | * * 382 | 1 Unidrive4.asm 363 | Comment | 11 | | 0 | 00/0535 | * APPLE-II FLOATING * 383 | 1 Unidrive4.asm 364 | Comment | 11 | | 0 | 00/0535 | * POINT ROUTINES * 384 | 1 Unidrive4.asm 365 | Comment | 11 | | 0 | 00/0535 | * * 385 | 1 Unidrive4.asm 366 | Comment | 11 | | 0 | 00/0535 | * COPYRIGHT 1977 BY * 386 | 1 Unidrive4.asm 367 | Comment | 11 | | 0 | 00/0535 | * APPLE COMPUTER INC. * 387 | 1 Unidrive4.asm 368 | Comment | 11 | | 0 | 00/0535 | * * 388 | 1 Unidrive4.asm 369 | Comment | 11 | | 0 | 00/0535 | * ALL RIGHTS RESERVED * 389 | 1 Unidrive4.asm 370 | Comment | 11 | | 0 | 00/0535 | * * 390 | 1 Unidrive4.asm 371 | Comment | 11 | | 0 | 00/0535 | * S. WOZNIAK * 391 | 1 Unidrive4.asm 372 | Comment | 11 | | 0 | 00/0535 | * * 392 | 1 Unidrive4.asm 373 | Comment | 11 | | 0 | 00/0535 | *********************** 393 | 1 Unidrive4.asm 374 | Comment | 11 | | 0 | 00/0535 | * TITLE "FLOATING POINT ROUTINES for Unidisk memory" 394 | 1 Unidrive4.asm 375 | Comment | 11 | | 0 | 00/0535 | * 395 | 1 Unidrive4.asm 376 | Empty | 11 | | 0 | 00/0535 | 396 | 1 Unidrive4.asm 377 | Code | 11 | | 1 | 00/0535 : 18 | ADD CLC ;CLEAR CARRY 397 | 1 Unidrive4.asm 378 | Code | 11 | | 2 | 00/0536 : A2 02 | LDX #$2 ;INDEX FOR 3-BYTE ADD. 398 | 1 Unidrive4.asm 379 | Code | 11 | | 2 | 00/0538 : B5 C6 | ADD1 LDA {$C6},X 399 | 1 Unidrive4.asm 380 | Code | 11 | | 2 | 00/053A : 75 C2 | ADC {$C2},X ;ADD A BYTE OF MANT2 TO MANT1 400 | 1 Unidrive4.asm 381 | Code | 11 | | 2 | 00/053C : 95 C6 | STA {$C6},X 401 | 1 Unidrive4.asm 382 | Code | 11 | | 1 | 00/053E : CA | DEX ;INDEX TO NEXT MORE SIGNIF. BYTE. 402 | 1 Unidrive4.asm 383 | Code | 11 | | 2 | 00/053F : 10 F7 | BPL ADD1 ;LOOP UNTIL DONE. 403 | 1 Unidrive4.asm 384 | Code | 11 | | 1 | 00/0541 : 60 | RTS ;RETURN 404 | 1 Unidrive4.asm 385 | Code | 11 | | 2 | 00/0542 : 06 C0 | MD1 ASL {$C0} ;CLEAR LSB OF SIGN. 405 | 1 Unidrive4.asm 386 | Code | 11 | | 3 | 00/0544 : 20 47 05 | JSR ABSWAP ;ABS VAL OF M1, THEN SWAP WITH M2 406 | 1 Unidrive4.asm 387 | Code | 11 | | 2 | 00/0547 : 24 C6 | ABSWAP BIT {$C6} ;MANT1 NEGATIVE? 407 | 1 Unidrive4.asm 388 | Code | 11 | | 2 | 00/0549 : 10 05 | BPL ABSWAP1 ;NO, SWAP WITH MANT2 AND RETURN. 408 | 1 Unidrive4.asm 389 | Code | 11 | | 3 | 00/054B : 20 B4 05 | JSR FCOMPL ;YES, COMPLEMENT IT. 409 | 1 Unidrive4.asm 390 | Code | 11 | | 2 | 00/054E : E6 C0 | INC {$C0} ;INCR SIGN, COMPLEMENTING LSB. 410 | 1 Unidrive4.asm 391 | Code | 11 | | 1 | 00/0550 : 38 | ABSWAP1 SEC ;SET CARRY FOR RETURN TO MUL/DIV. 411 | 1 Unidrive4.asm 392 | Code | 11 | | 2 | 00/0551 : A2 04 | SWAP LDX #$4 ;INDEX FOR 4 BYTE SWAP. 412 | 1 Unidrive4.asm 393 | Code | 11 | | 2 | 00/0553 : 94 C8 | SWAP1 STY {$C9}-1,X 413 | 1 Unidrive4.asm 394 | Code | 11 | | 2 | 00/0555 : B5 C4 | LDA {$C5}-1,X ;SWAP A BYTE OF EXP/MANT1 WITH 414 | 1 Unidrive4.asm 395 | Code | 11 | | 2 | 00/0557 : B4 C0 | LDY {$C1}-1,X ;EXP/MANT2 AND LEAVE A COPY OF 415 | 1 Unidrive4.asm 396 | Code | 11 | | 2 | 00/0559 : 94 C4 | STY {$C5}-1,X ;MANT1 IN E (3 BYTES). E+3 USED 416 | 1 Unidrive4.asm 397 | Code | 11 | | 2 | 00/055B : 95 C0 | STA {$C1}-1,X 417 | 1 Unidrive4.asm 398 | Code | 11 | | 1 | 00/055D : CA | DEX ;ADVANCE INDEX TO NEXT BYTE 418 | 1 Unidrive4.asm 399 | Code | 11 | | 2 | 00/055E : D0 F3 | BNE SWAP1 ;LOOP UNTIL DONE. 419 | 1 Unidrive4.asm 400 | Code | 11 | | 1 | 00/0560 : 60 | RTS ;RETURN 420 | 1 Unidrive4.asm 401 | Code | 11 | | 2 | 00/0561 : A9 8E | FLOAT LDA #$8E ;INIT EXP1 TO 14, <--------------- int to fp 421 | 1 Unidrive4.asm 402 | Code | 11 | | 2 | 00/0563 : 85 C5 | STA {$C5} ;THEN NORMALIZE TO FLOAT. 422 | 1 Unidrive4.asm 403 | Code | 11 | | 2 | 00/0565 : A5 C6 | NORM1 LDA {$C6} ;HIGH-ORDER MANT1 BYTE. 423 | 1 Unidrive4.asm 404 | Code | 11 | | 2 | 00/0567 : C9 C0 | CMP #$C0 ;UPPER TWO BITS UNEQUAL? 424 | 1 Unidrive4.asm 405 | Code | 11 | | 2 | 00/0569 : 30 0C | BMI RTS1 ;YES, RETURN WITH MANT1 NORMALIZED 425 | 1 Unidrive4.asm 406 | Code | 11 | | 2 | 00/056B : C6 C5 | DEC {$C5} ;DECREMENT EXP1. 426 | 1 Unidrive4.asm 407 | Code | 11 | | 2 | 00/056D : 06 C8 | ASL {$C6}+2 427 | 1 Unidrive4.asm 408 | Code | 11 | | 2 | 00/056F : 26 C7 | ROL {$C6}+1 ;SHIFT MANT1 (3 BYTES) LEFT. 428 | 1 Unidrive4.asm 409 | Code | 11 | | 2 | 00/0571 : 26 C6 | ROL {$C6} 429 | 1 Unidrive4.asm 410 | Code | 11 | | 2 | 00/0573 : A5 C5 | NORM LDA {$C5} ;EXP1 ZERO? 430 | 1 Unidrive4.asm 411 | Code | 11 | | 2 | 00/0575 : D0 EE | BNE NORM1 ;NO, CONTINUE NORMALIZING. 431 | 1 Unidrive4.asm 412 | Code | 11 | | 1 | 00/0577 : 60 | RTS1 RTS ;RETURN. 432 | 1 Unidrive4.asm 413 | Code | 11 | | 3 | 00/0578 : 20 B4 05 | FSUB JSR FCOMPL ;CMPL MANT1,CLEARS CARRY UNLESS 0 <---- sub 433 | 1 Unidrive4.asm 414 | Code | 11 | | 3 | 00/057B : 20 8B 05 | SWPALGN JSR ALGNSWP ;RIGHT SHIFT MANT1 OR SWAP WITH 434 | 1 Unidrive4.asm 415 | Code | 11 | | 2 | 00/057E : A5 C1 | FADD LDA {$C1} ;<------------------------------------- add 435 | 1 Unidrive4.asm 416 | Code | 11 | | 2 | 00/0580 : C5 C5 | CMP {$C5} ;COMPARE EXP1 WITH EXP2. 436 | 1 Unidrive4.asm 417 | Code | 11 | | 2 | 00/0582 : D0 F7 | BNE SWPALGN ;IF #,SWAP ADDENDS OR ALIGN MANTS. 437 | 1 Unidrive4.asm 418 | Code | 11 | | 3 | 00/0584 : 20 35 05 | JSR ADD ;ADD ALIGNED MANTISSAS. 438 | 1 Unidrive4.asm 419 | Code | 11 | | 2 | 00/0587 : 50 EA | ADDEND BVC NORM ;NO OVERFLOW, NORMALIZE RESULT. 439 | 1 Unidrive4.asm 420 | Code | 11 | | 2 | 00/0589 : 70 05 | BVS RTLOG ;OV: SHIFT M1 RIGHT, CARRY INTO SIGN 440 | 1 Unidrive4.asm 421 | Code | 11 | | 2 | 00/058B : 90 C4 | ALGNSWP BCC SWAP ;SWAP IF CARRY CLEAR, 441 | 1 Unidrive4.asm 422 | Comment | 11 | | 0 | 00/058D | * ELSE SHIFT RIGHT ARITH. 442 | 1 Unidrive4.asm 423 | Code | 11 | | 2 | 00/058D : A5 C6 | RTAR LDA {$C6} ;SIGN OF MANT1 INTO CARRY FOR 443 | 1 Unidrive4.asm 424 | Code | 11 | | 1 | 00/058F : 0A | ASL ;RIGHT ARITH SHIFT. 444 | 1 Unidrive4.asm 425 | Code | 11 | | 2 | 00/0590 : E6 C5 | RTLOG INC {$C5} ;INCR X1 TO ADJUST FOR RIGHT SHIFT 445 | 1 Unidrive4.asm 426 | Code | 11 | | 2 | 00/0592 : F0 75 | BEQ OVFL ;EXP1 OUT OF RANGE. 446 | 1 Unidrive4.asm 427 | Code | 11 | | 2 | 00/0594 : A2 FA | RTLOG1 LDX #$FA ;INDEX FOR 6:BYTE RIGHT SHIFT. 447 | 1 Unidrive4.asm 428 | Code | 11 | | 2 | 00/0596 : 76 CC | ROR1 ROR {$C9}+3,X 448 | 1 Unidrive4.asm 429 | Code | 11 | | 1 | 00/0598 : E8 | INX ;NEXT BYTE OF SHIFT. 449 | 1 Unidrive4.asm 430 | Code | 11 | | 2 | 00/0599 : D0 FB | BNE ROR1 ;LOOP UNTIL DONE. 450 | 1 Unidrive4.asm 431 | Code | 11 | | 1 | 00/059B : 60 | RTS ;RETURN. 451 | 1 Unidrive4.asm 432 | Code | 11 | | 3 | 00/059C : 20 42 05 | FMUL JSR MD1 ;ABS VAL OF MANT1, MANT2 <-------------- mul 452 | 1 Unidrive4.asm 433 | Code | 11 | | 2 | 00/059F : 65 C5 | ADC {$C5} ;ADD EXP1 TO EXP2 FOR PRODUCT EXP 453 | 1 Unidrive4.asm 434 | Code | 11 | | 3 | 00/05A1 : 20 F2 05 | JSR MD2 ;CHECK PROD. EXP AND PREP. FOR MUL 454 | 1 Unidrive4.asm 435 | Code | 11 | | 1 | 00/05A4 : 18 | CLC ;CLEAR CARRY FOR FIRST BIT. 455 | 1 Unidrive4.asm 436 | Code | 11 | | 3 | 00/05A5 : 20 94 05 | MUL1 JSR RTLOG1 ;M1 AND E RIGHT (PROD AND MPLIER) 456 | 1 Unidrive4.asm 437 | Code | 11 | | 2 | 00/05A8 : 90 03 | BCC MUL2 ;IF CARRY CLEAR, SKIP PARTIAL PROD 457 | 1 Unidrive4.asm 438 | Code | 11 | | 3 | 00/05AA : 20 35 05 | JSR ADD ;ADD MULTIPLICAND TO PRODUCT. 458 | 1 Unidrive4.asm 439 | Code | 11 | | 1 | 00/05AD : 88 | MUL2 DEY ;NEXT MUL ITERATION. 459 | 1 Unidrive4.asm 440 | Code | 11 | | 2 | 00/05AE : 10 F5 | BPL MUL1 ;LOOP UNTIL DONE. 460 | 1 Unidrive4.asm 441 | Code | 11 | | 2 | 00/05B0 : 46 C0 | MDEND LSR {$C0} ;TEST SIGN LSB. 461 | 1 Unidrive4.asm 442 | Code | 11 | | 2 | 00/05B2 : 90 BF | NORMX BCC NORM ;IF EVEN,NORMALIZE PROD,ELSE COMP 462 | 1 Unidrive4.asm 443 | Code | 11 | | 1 | 00/05B4 : 38 | FCOMPL SEC ;SET CARRY FOR SUBTRACT. <--------------- not 463 | 1 Unidrive4.asm 444 | Code | 11 | | 2 | 00/05B5 : A2 03 | LDX #$3 ;INDEX FOR 3 BYTE SUBTRACT. 464 | 1 Unidrive4.asm 445 | Code | 11 | | 2 | 00/05B7 : A9 00 | COMPL1 LDA #$0 ;CLEAR A. 465 | 1 Unidrive4.asm 446 | Code | 11 | | 2 | 00/05B9 : F5 C5 | SBC {$C5},X ;SUBTRACT BYTE OF EXP1. 466 | 1 Unidrive4.asm 447 | Code | 11 | | 2 | 00/05BB : 95 C5 | STA {$C5},X ;RESTORE IT. 467 | 1 Unidrive4.asm 448 | Code | 11 | | 1 | 00/05BD : CA | DEX ;NEXT MORE SIGNIFICANT BYTE. 468 | 1 Unidrive4.asm 449 | Code | 11 | | 2 | 00/05BE : D0 F7 | BNE COMPL1 ;LOOP UNTIL DONE. 469 | 1 Unidrive4.asm 450 | Code | 11 | | 2 | 00/05C0 : F0 C5 | BEQ ADDEND ;NORMALIZE (OR SHIFT RT IF OVFL). 470 | 1 Unidrive4.asm 451 | Code | 11 | | 3 | 00/05C2 : 20 42 05 | FDIV JSR MD1 ;TAKE ABS VAL OF MANT1, MANT2. <--------- div 471 | 1 Unidrive4.asm 452 | Code | 11 | | 2 | 00/05C5 : E5 C5 | SBC {$C5} ;SUBTRACT EXP1 FROM EXP2. 472 | 1 Unidrive4.asm 453 | Code | 11 | | 3 | 00/05C7 : 20 F2 05 | JSR MD2 ;SAVE AS QUOTIENT EXP. 473 | 1 Unidrive4.asm 454 | Code | 11 | | 1 | 00/05CA : 38 | DIV1 SEC ;SET CARRY FOR SUBTRACT. 474 | 1 Unidrive4.asm 455 | Code | 11 | | 2 | 00/05CB : A2 02 | LDX #$2 ;INDEX FOR 3-BYTE SUBTRACTION. 475 | 1 Unidrive4.asm 456 | Code | 11 | | 2 | 00/05CD : B5 C2 | DIV2 LDA {$C2},X 476 | 1 Unidrive4.asm 457 | Code | 11 | | 2 | 00/05CF : F5 C9 | SBC {$C9},X ;SUBTRACT A BYTE OF E FROM MANT2. 477 | 1 Unidrive4.asm 458 | Code | 11 | | 1 | 00/05D1 : 48 | PHA ;SAVE ON STACK. 478 | 1 Unidrive4.asm 459 | Code | 11 | | 1 | 00/05D2 : CA | DEX ;NEXT MORE SIGNIFICANT BYTE. 479 | 1 Unidrive4.asm 460 | Code | 11 | | 2 | 00/05D3 : 10 F8 | BPL DIV2 ;LOOP UNTIL DONE. 480 | 1 Unidrive4.asm 461 | Code | 11 | | 2 | 00/05D5 : A2 FD | LDX #$FD ;INDEX FOR 3-BYTE CONDITIONAL MOVE 481 | 1 Unidrive4.asm 462 | Code | 11 | | 1 | 00/05D7 : 68 | DIV3 PLA ;PULL BYTE OF DIFFERENCE OFF STACK 482 | 1 Unidrive4.asm 463 | Code | 11 | | 2 | 00/05D8 : 90 02 | BCC DIV4 ;IF M2