Some help ?
-------
* @com.wudsn.ide.asm.hardware=APPLE2
* Protocol Converter Call
XC
ZPTempL equ $0006 ;Temporary zero page storage
ZPTempH equ $0007
** Zero page storage **
N1 equ $FA ;25 4 Byte FP FA--FD (FP1)
N2 equ $EC ;27 4 Byte FP EC--EF (FP2)
; RSLT equ $1D ;29
*** Monitor routines ***
COut equ $FDED ;Console output ASCII
CROut equ $FD8E ;Carriage return
** Command Code **
StatusCmd equ 0
** Status Code **
* StatusDIB equ 3
StatusUNI equ 5
*
ControlCmd equ 4
** Control Codes **
Eject equ 4
Run equ 5
SetDWLoad equ 6
DWLoad equ 7
*
org $8000
*****************************************************
*
* Find a Protocol Converter in one of the slots.
START jsr FindPC
bcs Error
*** Eject ***
jsr Dispatch
dfb ControlCmd
dw E_JECT
*** Set Address ***
jsr Dispatch
dfb ControlCmd
dw SET_ADD
*
jsr EXEC ; Jump the Error routine
rts
<snip>
** Set the Input Value first in Dynamic data **
** 4 Byte N1 to FP1 **
EXEC lda N1 ;X1
sta ; Absolute addressing
lda N1+1 ;M1 (1)
sta
lda N1+2 ;M1 (2)
sta
lda N1+2 ;M1 (3)
sta
** 4 Byte N2 to FP2 **
lda N2 ;X2
sta
lda N2+1 ;M2 (1)
sta
lda N2+2 ;M2 (2)
sta
lda N2+2 ;M2 (3)
sta
*** Download ***
jsr Dispatch
dfb ControlCmd
dw DOWNLOAD
** Set Unidisk Registers First time execution **
lda #01 ;First time
sta UNIAcc_reg
** 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 N1
lda UNIX_reg
sta N1+1
lda UNIY_reg
sta N1+2
** Set Unidisk Registers Second time execute **
lda #02 ; Second time
sta UNIAcc_reg
** 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 N1+2
*
rts
<snip>
*** Start UNIDISK Program ***
org $0505
SIGN EQU $C0 ;$EB ; $F3
** FP2 4 Bytes **
X2 EQU $C1 ;$EC ; $F4
M2 EQU $C2 ;$ED ; $F5 - $F7
** FP1 4 Bytes + E extension **
X1 EQU $C5 ;$FA ; $F8
M1 EQU $C6 ;$FB ; $F9 - $FB
E EQU $C9 ;$FE ; $FC
OVLOC EQU $C10 ;$3F5 ;Overflow routine is not implemented at now)
*
** Main program **
*
* CHK if is the second execution *
cmp #02
beq SECOND
** Input data to Zero Page **
** FP1 **
lda FP1
sta X1
lda FP1+1
sta M1
lda FP1+2
sta M1+1
lda FP1+3
sta M1+2
** FP2 **
lda FP2
sta X2
lda FP2+1
sta M2
lda FP2+2
sta M2+1
lda FP2+3
sta M2+2
*** Target Function ***
* Y=N1+N2
** Simple ADD **
jsr FADD ; Call Add in FP routine
*** Output Data result FP1 to Unidisk registers First Time first 3 Byte***
lda X1
ldx M1
ldy M1+1
rts
*** Output Data result FP1 to Unidisk registers Second Time latest 1 Byte***
SECOND lda M1+2
rts
** FP Routine **
*
<snip>
** 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