Compare commits

...

24 Commits
Beta ... master

Author SHA1 Message Date
Riccardo
82721aee29
Update README.md 2023-11-16 17:43:04 +01:00
Riccardo
ffedffdd11 More coments 2023-05-21 20:56:10 +02:00
Riccardo
0612e79002
Update README.md
Grammar corrections
2023-01-21 15:40:37 +01:00
Riccardo
415c2dd97e
Update README.md 2021-07-25 15:33:55 +02:00
Riccardo
34cf31e767
Update README.md
Add IC descriptions
2021-07-25 14:04:55 +02:00
Riccardo
972848e5fb
Merge pull request #5 from rigreco/Actions-test
Action test 2
2020-10-04 15:26:44 +02:00
Riccardo
a549adee54
Merge branch 'master' into Actions-test 2020-10-04 15:19:17 +02:00
RICCARDO
aeadfa78c6 Action test 2 2020-10-04 15:14:21 +02:00
RICCARDO
922a76874b Actions test 1 2020-10-04 15:09:51 +02:00
Riccardo
61da5dca89
Create Build.yml 2020-10-04 14:53:12 +02:00
Riccardo
1c1ddc5321
Create README.md 2020-10-04 14:47:00 +02:00
Riccardo
a638973485
Create _FileInformation.txt 2020-10-04 14:45:12 +02:00
Riccardo
bff74d57f3
Create TESTBIN.s 2020-10-04 14:43:48 +02:00
Riccardo
4a03b5906d
Create TESTBAS 2020-10-04 14:41:02 +02:00
RICCARDO
a408d30fc3 Add compile files 2020-06-03 19:53:16 +02:00
RICCARDO
6cecfbb810 Update README.md 2020-06-01 15:24:49 +02:00
Riccardo
165d047026
Update README.md 2020-06-01 12:47:58 +02:00
Riccardo
7e6c9e12da
Update README.md 2020-05-31 22:49:00 +02:00
Riccardo
fd9e784226
Update bug_report.md 2020-05-31 22:03:36 +02:00
Riccardo
9bd61f0ef1 Update issue templates 2020-05-31 21:52:33 +02:00
RICCARDO
133025abfe - Update .bas files
- Rename files
- Update files extension
- Reorganize directory
2020-05-31 21:21:43 +02:00
Riccardo
48fc19a077
Delete images 2020-05-23 15:52:08 +02:00
Riccardo
2b392695a6
Create images 2020-05-23 15:46:21 +02:00
Riccardo
afbd3795da
Update README.md 2020-05-23 15:44:01 +02:00
85 changed files with 4813 additions and 4167 deletions

39
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,39 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Build Device (please complete the following information):**
- Device: [Mac/PC]
- OS:
- IDE: [e.g. VS Code, Eclipse]
- Build Solution [MakeFile]:
**Build/Target Device (please complete the following information):**
- Device: [e.g. Apple //c]
- Unidisks: [n., Model]
- OS: [e.g. ProDos]
- Compiler: [e.g. Merlin Assembler]
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

74
.github/workflows/Build.yml vendored Normal file
View File

@ -0,0 +1,74 @@
# This is a basic workflow for Merlin32 cross-dev Tools with GitHub Actions for UNIDISK project
# https://brutaldeluxe.fr/products/crossdevtools/
# The Actions are based on digarok repository:
# https://github.com/digarok/install-merlin32-action
# https://github.com/digarok/install-cadius-action
name: CI
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches: [ master ]
paths:
- 'src/TESTBAS'
- 'src/TESTBIN.s'
pull_request:
branches: [ master ]
paths:
- 'src/TESTBAS'
- 'src/TESTBIN.s'
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v1
# This will install Merlin32 on your Github Runner machine
- name: install-merlin32-action
uses: digarok/install-merlin32-action@v0.1.1
# Now you can use it to assemble your source code
- name: Assembly Step
run: merlin32 -V src/TESTBIN.s
# CHK Errors (if the previous step failure, there's errors in the source code, then it will upload the errors text file in artifact)
- name: CHK errors
if: ${{ failure() }}
uses: actions/upload-artifact@v1
with:
name: Error
path: ./src/error_output.txt
# This will install Cadius on your Github Runner machine
- name: Install Cadius
uses: digarok/install-cadius-action@v0.1.1
# This will make bootalble ProDOS DISK image
- name: Make bootable ProDOS image
run: |
cadius createvolume ./src/virtual.po unidisk 140KB
cadius addfile ./src/virtual.po /unidisk/ ./PRODOS.2.4.2/PRODOS
cadius addfile ./src/virtual.po /unidisk/ ./PRODOS.2.4.2/BASIC.SYSTEM
echo "TESTBAS=Type(04),AuxType(0000),VersionCreate(24),MinVersion(00),Access(E3)" > ./src/_FileInformation.txt
cadius addfile ./src/virtual.po /unidisk/ ./src/TESTBAS
echo "TESTBIN=Type(06),AuxType(8000),VersionCreate(24),MinVersion(00),Access(E3)" >> ./src/_FileInformation.txt
cadius addfile ./src/virtual.po /unidisk/ ./src/TESTBIN
cadius catalog ./src/virtual.po
ls -al src
# This will upload entire work directory in artifact
- uses: actions/upload-artifact@v1
with:
name: Output
path: ./src/

BIN
AppleII/Chksum Normal file

Binary file not shown.

40
AppleII/Chksum_Output.txt Normal file
View File

@ -0,0 +1,40 @@
------+--------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code
------+--------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
1 | 1 Chksum.s 1 | Equivalence | 11 | | 0 | 00/8000 | COut equ $FDED
2 | 1 Chksum.s 2 | Equivalence | 11 | | 0 | 00/8000 | PTR equ $EB
3 | 1 Chksum.s 3 | Code | 11 | | 2 | 00/8000 : A9 00 | STARTCHK lda #<STARTCHK
4 | 1 Chksum.s 4 | Code | 11 | | 2 | 00/8002 : 85 EB | sta {$EB}
5 | 1 Chksum.s 5 | Code | 11 | | 2 | 00/8004 : A9 80 | lda #>STARTCHK
6 | 1 Chksum.s 6 | Code | 11 | | 2 | 00/8006 : 85 EC | sta {$EB}+1
7 | 1 Chksum.s 7 | Code | 11 | | 2 | 00/8008 : A0 00 | ldy #$00
8 | 1 Chksum.s 8 | Code | 11 | | 2 | 00/800A : A9 00 | lda #$00
9 | 1 Chksum.s 9 | Code | 11 | | 1 | 00/800C : 48 | pha
10 | 1 Chksum.s 10 | Empty | 11 | | 0 | 00/800D |
11 | 1 Chksum.s 11 | Code | 11 | | 1 | 00/800D : 68 | LOOP pla
12 | 1 Chksum.s 12 | Code | 11 | | 2 | 00/800E : 51 EB | eor ({$EB}),y
13 | 1 Chksum.s 13 | Code | 11 | | 1 | 00/8010 : 48 | pha
14 | 1 Chksum.s 14 | Code | 11 | | 2 | 00/8011 : E6 EB | inc {$EB}
15 | 1 Chksum.s 15 | Code | 11 | | 2 | 00/8013 : D0 02 | bne CHK
16 | 1 Chksum.s 16 | Code | 11 | | 2 | 00/8015 : E6 EC | inc {$EB}+1
17 | 1 Chksum.s 17 | Code | 11 | | 2 | 00/8017 : A5 EC | CHK lda {$EB}+1
18 | 1 Chksum.s 18 | Code | 11 | | 2 | 00/8019 : C9 80 | cmp #>PROGEND
19 | 1 Chksum.s 19 | Code | 11 | | 2 | 00/801B : 90 F0 | bcc LOOP
20 | 1 Chksum.s 20 | Code | 11 | | 2 | 00/801D : A5 EB | lda {$EB}
21 | 1 Chksum.s 21 | Code | 11 | | 2 | 00/801F : C9 30 | cmp #<PROGEND
22 | 1 Chksum.s 22 | Code | 11 | | 2 | 00/8021 : 90 EA | bcc LOOP
23 | 1 Chksum.s 23 | Code | 11 | | 2 | 00/8023 : F0 E8 | beq LOOP
24 | 1 Chksum.s 24 | Code | 11 | | 1 | 00/8025 : 68 | CHKCS pla
25 | 1 Chksum.s 25 | Code | 11 | | 3 | 00/8026 : CD 31 80 | cmp CHKSUM
26 | 1 Chksum.s 26 | Code | 11 | | 2 | 00/8029 : D0 07 | bne ERROR
27 | 1 Chksum.s 27 | Code | 11 | | 2 | 00/802B : A9 00 | REALSTART lda #0
28 | 1 Chksum.s 28 | Code | 11 | | 1 | 00/802D : 1A | inc A
29 | 1 Chksum.s 29 | Code | 11 | | 2 | 00/802E : 85 FA | sta $FA
30 | 1 Chksum.s 30 | Code | 11 | | 1 | 00/8030 : 60 | PROGEND rts
31 | 1 Chksum.s 31 | Data | 11 | | 1 | 00/8031 : 00 | CHKSUM chk
32 | 1 Chksum.s 32 | Code | 11 | | 3 | 00/8032 : 8D 3B 80 | ERROR sta CHKCALC
33 | 1 Chksum.s 33 | Code | 11 | | 2 | 00/8035 : A9 C5 | lda #"E"
34 | 1 Chksum.s 34 | Code | 11 | | 3 | 00/8037 : 20 ED FD | jsr {$FDED}
35 | 1 Chksum.s 35 | Code | 11 | | 1 | 00/803A : 60 | rts
36 | 1 Chksum.s 36 | Data | 11 | | 1 | 00/803B : 00 | CHKCALC dfb $00
------+--------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

View File

@ -1,14 +0,0 @@
2 PRINT CHR$ (4);"BLOAD UNIDRIVE4P"
5 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

View File

@ -1,147 +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
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
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

@ -1,15 +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
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

@ -1,15 +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
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

File diff suppressed because it is too large Load Diff

View File

@ -1,326 +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
*
* 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

@ -1,351 +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 ****************
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
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

@ -1,3 +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)
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

@ -1,15 +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
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

View File

@ -1,143 +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
* @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

@ -1,143 +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
* @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

@ -1,147 +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
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
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
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

View File

@ -1,326 +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
*
* 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

@ -1,351 +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 ****************
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
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 ****************
------+----------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +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
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

@ -1,3 +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)
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)

View File

@ -1,10 +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
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

View File

@ -0,0 +1,16 @@
5 HOME
8 PRINT CHR$ (4);"BLOAD UNIDRIVE4P"
10 PRINT CHR$ (4);"BLOAD CONV3P"
12 X = 1
15 CALL 32768,X
20 CALL 24576
25 PRINT CHR$ (4);"BLOAD UNIDRIVE4P2"
30 HGR2 : HCOLOR= 3
40 FOR X = - 10 TO 10 STEP .2
45 CALL 32768,X
50 CALL 24576
55 CALL 32831,Y
60 HPLOT X * 5 + 140,Y + 10
65 NEXT
70 GET A$
75 TEXT

View File

@ -0,0 +1,19 @@
5 HOME
10 PRINT CHR$ (4);"BLOAD UNIDRIVE4P"
12 PRINT CHR$ (4);"BLOAD CONV3P"
13 PRINT "FLOATING POINT SQUARE N"
14 PRINT
15 INPUT "TYPE REAL NUMBER TO SQUARE --> ";X
20 CALL 32768,X
27 CALL 24576
30 CALL 32831,Y
40 PRINT Y
45 PRINT
50 PRINT CHR$ (4);"BLOAD UNIDRIVE4P2"
55 INPUT "N1 ? ";X
60 CALL 32768,X
65 CALL 24576
70 CALL 32831,Y
80 PRINT Y
85 PRINT
90 GOTO 55

View File

@ -1,5 +1,5 @@
10 HOME
20 PRINT CHR$ (4);"BLOAD UNIDRIVE"
20 PRINT CHR$ (4);"BLOAD UNICALC"
25 INPUT "N1,N2? ";N1,N2
30 POKE 10,N1
35 POKE 11,N2

View File

@ -1,9 +1,13 @@
10 HOME
20 PRINT CHR$ (4);"BLOAD UNIDRIVE2"
22 PRINT "TWO BYTE SUM OF 2 INTEGER NUMBER N1+N2"
23 PRINT
25 INPUT "N1,N2? ";N1,N2
30 POKE 25,(N1 - INT (N1 / 256) * 256)
32 POKE 26, INT (N1 / 256)
35 POKE 27,(N2 - INT (N2 / 256) * 256)
37 POKE 28, INT (N2 / 256)
40 CALL 32768
50 PRINT : PRINT "RESULT IS "; PEEK (29) + 256 * PEEK (30)
50 PRINT : PRINT "RESULT IS "; PEEK (29) + 256 * PEEK (30)
55 PRINT
60 GOTO 25

View File

@ -23,8 +23,8 @@
ZPTempL equ $0006 ;Temporary zero page storage
ZPTempH equ $0007
*** Pointers ***
LowMain equ $000A
HiMain equ $000B
LowMain equ $000A ; Pointer to low byte of main memory address
HiMain equ $000B ; Pointer to high byte of main memory address
*** Monitor routines ***
COut equ $FDED ;Console output ASCII
COUT1 equ $FDF0 ;Output to screen
@ -40,14 +40,14 @@ StatusUNI equ 5
*
ControlCmd equ 4
** Control Codes **
Eject equ 4
Run equ 5
SetDWLoad equ 6
DWLoad equ 7
Eject equ 4 ;Control code for ejecting disk
Run equ 5 ;Control code for running program on Unidisk
SetDWLoad equ 6 ;Control code for setting download address on Unidisk
DWLoad equ 7 ;Control code for downloading data to Unidisk
*
org $8000
*****************************************************
* Presentation message **************
* Presentation message loop to display message on screen using COut routine **************
*
ldx #0
LOOP equ *

View File

@ -1,7 +0,0 @@
10 HOME
20 PRINT CHR$ (4);"BLOAD UNIDRIVE3"
25 INPUT "N ";N1
30 POKE 25,(N1 - INT (N1 / 256) * 256)
32 POKE 26, INT (N1 / 256)
40 CALL 32768
50 PRINT : PRINT "RESULT IS "; PEEK (29) + 256 * PEEK (30)

View File

@ -0,0 +1,11 @@
10 HOME
20 PRINT CHR$ (4);"BLOAD UNIDRIVE3"
22 PRINT "TWO BYTE SUM OF FIRST N INTEGER NUMBER 1+2+3+...+(N-1)+N"
23 PRINT
25 INPUT "TYPE INTEGER NUMBER N --> ";N1
30 POKE 25,(N1 - INT (N1 / 256) * 256)
32 POKE 26, INT (N1 / 256)
40 CALL 32768
50 PRINT : PRINT "RESULT IS "; PEEK (29) + 256 * PEEK (30)
55 PRINT
60 GOTO 25

Binary file not shown.

BIN
Images/UniDisk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

View File

@ -1,15 +1,56 @@
# Apple II UniDisk 3.5 drive project
The project is based on the knowing of internal structure of UniDisk 3.5 drive, it use same HW of Apple II machines. It's a smart device built by controlled drive board powered by 65c02 mp @2.0 Hz with 2KB RAM and 8KB ROM plus 527 byte of I/O peripheral registers, all addressing by memory mapped method. The UniDisk 3.5 drives can use directly by Apple //c with 3.5 ROM (ROM version 0) or by Apple IIe or an II Plus using special interface controller card aka "LIRON card". The Protocol Converter is a set of assembly-lenguage routines built in 3.5 ROM or in Liron controller used to support smart external I/O devices (aka SmartPort), like UniDisk 3.5. The target of project is allow to use UniDisk 3.5 drive resource to process data in-line or off-line the Apple II like a "co-processor". The project evolved steps by steps:
The project is based on the knowledge of internal structure of UniDisk 3.5 drive, it uses same HW of Apple II machines. It is a smart device built by controlled drive board powered by
>65c02 mp @2.0 MHz (model GTEu G65SC02P-2 CMOS 8bit 2MHz PDIP40) with 2KB StaticRAM (model HITACHI HM6116LP-2 CMOS 8bit 120ns PDIP24) and 8KB ROM (model A2M2053-V1.0 TC5365P-8718 250ns PDIP28) plus 527 byte of Gate array I/O peripheral locations plus 15 byte of IWM registers in IWM Floppy Disk Controller PROM (model VLI VF4060-001 344-0041-B IWM PDIP28), all addressing by memory mapped method.
The UniDisk 3.5 drives can used directly by Apple //c with 3.5 ROM (ROM version 0) or by Apple IIe or an II Plus using special interface controller card aka "LIRON card".
>(C) 1985 Apple Computer, Inc.
>
>The firmware was written by Michael Askins.
>
>The Liron design team was:
>* Josef Friedman, manager
>* Cheng Lin, hardware
>* Michael Askins, software
>* Cecilia Arboleya, tech support
>* Cameron Birse, tech support
*The Protocol Converter (PC)* is a set of assembly-language routines built in 3.5 ROM or in Liron controller used to support smart external I/O devices (aka SmartPort), like UniDisk 3.5.
*The Protocol Converter Bus (CBus)* consists of hardware and software components that permit and control communications between the Apple II and intelligent I/O devices (s. a. UniDisk 3.5's) connected o its external disk port.
- The software part of the Protocol Converter Bus includes Protocol Converter and the CBus communication protocol;
- The hardware component of the CBus is a daisy chain made up of the following:
* The Apple II disk port
* One or more Intelligent I/O devices (UniDisk drive)
* One Disk II (optional). If included, the Disk II must be the terminal member of the daisy chain and remains dormant when a bus resident is addressed.
The target of project allows to use UniDisk 3.5 drive resource to process data in-line or off-line on the Apple II like a "co-processor".
The project evolved steps by steps:
1) Simply command and read information of UniDisk (DIB Device Information Block) using Protocol Converter STATUS Call;
2) Using Protocol Converter CONTROL Call to simply Eject disk;
3) Using Protocol Converter CONTROL Call (Set Dowload, Download, Run) to Download and Run a special 65c02 subroutine, and using STATUS Call to read the informations. This complex sistem allow to Dumping all UniDisk memory;
4) Use the seme mechanism of step (3) to download a simply routine to making integer operation at one or two Byte and read the relative results;
5) Due to UniDisk, less the I/O Disk routine in its ROM, is a bare metal, i decide to implement the Floating Point routine by using WOZ original routine, but I was need to write the converter program from WOZ routine to Applesoft routine. This allow me to execute FP operations;
5) Due to UniDisk, less the I/O Disk routine in its ROM, is a bare metal, I decide to implement the Floating Point routine by using WOZ original routine, but I was need to write the converter program from WOZ routine to Applesoft routine. This allow me to execute FP operations;
6) Use the UniDisk FP operations to execute Graphics calculations.
This project required a great deal of effort due to use only the real Apple IIc machine to coding in 'Merlin' Assembler and 'Applesoft' Basic, because no Apple II simulator is able to emulate UniDisk Drive, at now.
This project required a great deal of effort due to use only the real Apple IIc machine to coding in 'Merlin' Assembler and 'Applesoft' Basic and then execute the code, because no Apple II simulator is able to emulate UniDisk 3.5 Drive, at now.
This project allow this target:
The PC/MAC next to the Apple II machine, connected by serial port, allows you to use different special software to compile, manage disks image and then send to Apple II. A custom all-in-one modern IDE also can be creating to automate all this process.
This project allows this target:
* Scan, identify, command and dump memory of UniDisk 3.5
* Allow to use UniDisk 3.5 like an Apple II "co-processor"
![UniDisk](/Images/UniDisk.png)

2
src/README.md Normal file
View File

@ -0,0 +1,2 @@
1) This is the forlders for test
2) Keep the same name as the test files

8
src/TESTBAS Normal file
View File

@ -0,0 +1,8 @@
10 HOME
15 PRINT "1 BYTE ADC OPERATIONS - exec TESTBAS.TXT then save it"
20 PRINT CHR$ (4);"BLOAD TESTBIN"
25 INPUT "N1,N2? ";N1,N2
30 POKE 10,N1
35 POKE 11,N2
40 CALL 32768
50 PRINT : PRINT "RESULT IS "; PEEK (12)

392
src/TESTBIN.s Normal file
View File

@ -0,0 +1,392 @@
* Actions test 2 10/4
* Unidisk 3.5 Calc <beta>
*
* The target of this project is to use the Unidisk 3.5 drive to perform
* specific numerical routines: 1 Byte Add integer 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
*** Pointers ***
LowMain equ $000A
HiMain equ $000B
*** Monitor routines ***
COut equ $FDED ;Console output ASCII
COUT1 equ $FDF0 ;Output to screen
CROut equ $FD8E ;Carriage return
PRbyte equ $FDDA ;Print byte in hex
PRBL2 equ $F94A ;Print many spaces
KEYIN equ $FD1B ;Waits for keypress
** 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 $8000
*****************************************************
* Presentation message **************
*
ldx #0
LOOP equ *
lda DATA,x
beq ME2
jsr COut
inx
bne LOOP
*
DATA asc 'UNIDISK 3.5 UTILITY BY R. GRECO'
dfb $8D,0 ; Inverse mode on
ME2 jsr CROut
jsr CROut
ldx #0
LOOP2 equ *
lda DATA2,x
beq START
ora #$80
jsr COut
inx
bne LOOP2
*
DATA2 asc 'A X Y P'
dfb $8D,0 ; Inverse mode on
*****************************************************
*
* Find a Protocol Converter in one of the slots.
START jsr FindPC
bcs Error
*
* Now make the DIB call to the first guy
*
* jsr Dispatch
* dfb StatusCmd
* dw DParmsDIB
* bcs Error
*
* Got the DIB; now print the name string
*
* ldx #0
* morechars equ *
* lda DIBName,x
* ora #$80 ;COut wants high Bit set
* jsr COut ; ASCII
* inx
* cpx DIBNameLen
* bne morechars
*************************************
* ldx #02 ; Set 2 space
* jsr PRBL2
** Print Type ***********************
* lda DIBType
* jsr PRbyte ; HEX form
*************************************
* ldx #02 ; Set 2 space
* jsr PRBL2
** Print Firmware version ***********
* ldx #0
* morechars2 equ *
* lda DIBVersion,x
* jsr PRbyte ; HEX form
* inx
* cpx #$02 ; 2 Byte
* bne morechars2
* jsr COut
**************************************
jsr CROut
** Wait keypress to continue **
*
jsr KEYIN
*
*** Eject ***
jsr Dispatch
dfb ControlCmd
dw E_JECT
*** Set start HiMain Memory Pointers ***
* lda #$20 ; Hi Byte start (//c ram)
* sta HiMain ; HiMain=$20 set
*** Set Address ***
jsr Dispatch
dfb ControlCmd
dw SET_ADD
*** Download ***
jsr Dispatch
dfb ControlCmd
dw DOWNLOAD
*
jsr EXEC ; Jump the Error routine
rts
*********************************************
Error equ *
*
* There's 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 and Reset LoMain Memory Counter ***
* RESET ldx #$FF ;Lo Byte start One more before $00 (//c ram)
* clc
* ldy Y_reg ; 1 time $DF --> Y
* iny ; Y+ --> $FF
* sty Y_reg ; Y --> Y_reg Uni=$FF
*** Execute ***
* EXEC inx
* stx LowMain ; 1 time set LowMain=$00
* stx X_reg
EXEC jsr Dispatch
dfb ControlCmd
dw EXE
READ jsr Dispatch
dfb StatusCmd
dw DParms
bcs Error
*
**** Screen Output ****
*
*** Accumulator ***
lda UNIAcc_reg
jsr PRbyte
ldx #03 ; Set 3 space
jsr PRBL2
*** X Register ***
lda UNIX_reg
jsr PRbyte
ldx #01 ; Set one space
jsr PRBL2
*** Y Register ***
lda UNIY_reg
jsr PRbyte
ldx #03 ; Set one space
jsr PRBL2
*** Process Status ***
lda UNIP_val
jsr PRbyte
ldx #05 ; Set five space
jsr PRBL2
** //c Memory store adress **
* lda HiMain
* jsr PRbyte
* lda LowMain
* jsr PRbyte
* jsr CROut
**** Store in //c Main Memory ****
* ldx X_reg
* lda UNIAcc_reg ;#$FB Test
* ldy #0
* sta (LowMain),y
* cpx UNIL_End
* bne EXEC
* UNIL_End dfb $FF ; Lo Byte stop (Unidisk) - $C0 for zero page
*** Increment HiMain ***
* inc HiMain
* ldy Y_reg
* cpy UNIH_End
* bne RESET
* UNIH_End dfb $FF ; Hi Byte stop (Unidisk) - $00 for zero page
*
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 Parameter Set for DIB ***
DParmsDIB equ *
DPParmsCt2 dfb 3 ;Status calls have three parameters
DPUnit2 dfb 1
DPBuffer2 dw DIB
DPStatCode2 dfb StatusDIB
*
*
*** Status List DIB ***
DIB equ *
DIBStatByte1 dfb 0
DIBDevSize dfb 0,0,0
DIBNameLen dfb 0
DIBName ds 16,0
DIBType dfb 0
DIBSubType dfb 0
DIBVersion dw 0
*
*** 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 ; Input Value
X_reg dfb $0A ; Input Value (N1)
Y_reg dfb $01 ; Input Value (N2)
ProStatus dfb $00
LowPC_reg dfb $05
HighPC_reg dfb $05
*
*** Set Address ***
CNTL_LIST3 equ *
CountL_byte dfb $02
CountH_byte dfb $00
LByte_Addr dfb $05
HByte_Addr dfb $05
*
*** Download ***
CNTL_LIST4 equ *
LenghtL_byte dfb $09 ;<----- Lenght of Unidisk program Lo Byte
LenghtH_byte dfb $00 ;<----- Lenght of Unidisk program Hi Byte
*
*** Start UNIDISK Program ***
stx $C0
sty $C1
lda $C0
adc $C1
rts

1
src/_FileInformation.txt Normal file
View File

@ -0,0 +1 @@
TESTBIN=Type(06),AuxType(6000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)