home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Elysian Archive
/
AmigaElysianArchive.iso
/
emulate
/
appleona.zoo
/
AmigaComm.source
next >
Wrap
Text File
|
1993-01-04
|
7KB
|
605 lines
LST OFF
MOV16 MAC
LDA ]2
STA ]1
LDA ]2+1
STA ]1+1
<<<
LDI16 MAC
LDA #<]2
STA ]1
LDA #>]2
STA ]1+1
<<<
DECI16 MAC
SEC
LDA ]1
SBC #<]2
STA ]1
LDA ]1+1
SBC #>]2
STA ]1+1
<<<
INCI16 MAC
CLC
LDA ]1
ADC #<]2
STA ]1
LDA ]1+1
ADC #>]2
STA ]1+1
<<<
SUB16 MAC
SEC
LDA ]2
SBC ]3
STA ]1
LDA ]2+1
SBC ]3+1
STA ]1+1
<<<
GOTOXY MAC
LDA #]1
STA CH
LDA #]2
JSR TABV
<<<
KBD EQU $C000
KBDCLR EQU $C010
DR0OFF EQU $C080
DR0ON EQU $C081
DR1OFF EQU $C082
DR1ON EQU $C083
DR2OFF EQU $C084
DR2ON EQU $C085
DR3OFF EQU $C086
DR3ON EQU $C087
DRMOTOFF EQU $C088
DRMOTON EQU $C089
DR1ENA EQU $C08A
DR2ENA EQU $C08B
* IF OUTPUT:
DRSTB EQU $C08C
DRLOAD EQU $C08D
* IF INPUT:
DRREAD EQU DRSTB
DRWPROT EQU DRLOAD
* SELECT INPUT/OUTPUT
DRINPUT EQU $C08E
DROUTPUT EQU $C08F
* IOB OFFSETS
SLOT EQU 1
DRIVE EQU 2
VOLUME EQU 3
TRACK EQU 4
SECTOR EQU 5
BUFFER EQU 8
COMMAND EQU 12
OLDVOL EQU 14
OLDSLOT EQU 15
OLDDRV EQU 16
SEEK EQU 0
READ EQU 1
* DOS ROUTINES
DOSWARM EQU $3D0
RWTS EQU $3D9
GETIOB EQU $3E3
* MONITOR ROUTINES
BS EQU $8
CR EQU $D
NAK EQU $15
ESC EQU $1B
CH EQU $24
CV EQU $25
BASE EQU $28
CSW EQU $36
MON EQU $FF65
PRERR EQU $FF2D
BOOT EQU $FAA6
TABV EQU $FB5B
VTAB EQU $FC22
HOME EQU $FC58
PRINTAX EQU $F941
PRBYTE EQU $FDDA
PRHEX EQU $FDE3
COUT EQU $FDED
COUT1 EQU $FDF0
CROUT EQU $FD8E
CROUT1 EQU $FD8B
RDKEY EQU $FD0C
KEYIN EQU $FD35
CLREOL EQU $FC9C
CLREOP EQU $FC42
* CONSTANTS
BASICROM EQU $D000
BASICLEN EQU $3000
DISKPROM EQU $C600
DPROMLEN EQU $0100
DATABUF EQU $4000
HEAD0 EQU $FF
HEAD1 EQU $D5
HEAD2 EQU $AA
HEAD3 EQU $96
MINTRKLEN EQU 5500
TRAIL1 EQU $DE
TRAIL2 EQU $AA
TRKNUM EQU 35
* VARIABLES
PTR EQU $FE
START EQU $FC
LENGTH EQU $FA
IOB EQU $F8
TRK EQU $F7
MSGPTR EQU $F5
* MAIN
ORG $8000
MAIN JSR HOME
LDA DATA0
JSR MSGOUT
INV " AMIGACOMM V0.1, 1992 BY CLAUDIO NIEDER "
HEX 00
>>> GOTOXY.5;8
JSR MSGOUT
ASC "R - SEND BASIC/DISK (P)ROM"
HEX 00
>>> GOTOXY.5;10
JSR MSGOUT
ASC "D - SEND DISK"
HEX 00
>>> GOTOXY.5;14
JSR MSGOUT
ASC "H - HELP"
HEX 00
>>> GOTOXY.5;18
JSR MSGOUT
ASC "Q - QUIT"
HEX 00
MAINL1 LDA KBD
BPL MAINL1
BIT KBDCLR
CMP #"R"
BEQ TOROM
CMP #"D"
BEQ TODISK
CMP #"H"
BEQ TOHELP
CMP #"Q"
BNE MAINL1
JSR HOME
JMP DOSWARM
TOHELP JMP TOHELP2
TOROM >>> GOTOXY.0;2
JSR CLREOP
>>> GOTOXY.5;9
JSR MSGOUT
ASC "TRANSFERRING BASIC ROM AND"
HEX 00
>>> GOTOXY.5;11
JSR MSGOUT
ASC "DISK PROM TO AMIGA"
HEX 00
JSR TXROM
JMP MAIN
TODISK >>> GOTOXY.0;2
JSR CLREOP
>>> GOTOXY.5;9
JSR MSGOUT
ASC "TRANSFER DISK TO AMIGA"
HEX 00
JSR TXDISK
JMP MAIN
TOHELP2 >>> GOTOXY.0;2
JSR CLREOP
JSR MSGOUT
HEX 8D8D
ASC "WITH THIS PROGRAM YOU CAN TRANSMIT THE"
HEX 8D
ASC "CONTENTS OF THE BASIC/MONITOR ROM AND"
HEX 8D
ASC "YOUR DISKS TO HE AMIGA, SO YOU CAN USE"
HEX 8D
ASC "THE APPLE 2 EMULATOR THERE."
HEX 8D8D
ASC "R) EXPECTS YOU HAVE A DISK CONROLLER IN"
HEX 8D
ASC " SLOT 6, AND TRANSMITS $C600-$C6FF"
HEX 8D
ASC " AND $D000-$FFFF TO THE AMIGA"
HEX 8D8D
ASC "D) TRANSMITS THE CONTENTS OF THE DISK"
HEX 8D
ASC " IN THE CURRENT DRIVE TO THE AMIGA"
HEX 8D
ASC " YOU CAN'T CHANGE SLOT/DRIVE"
HEX 8D8D8D
ASC "PRESS ANY KEY TO RETURN TO MAIN MENU"
HEX 00
THL1 BIT KBD
BPL THL1
BIT KBDCLR
JMP MAIN
TXROM >>> LDI16.LENGTH;BASICLEN
>>> LDI16.START;BASICROM
JSR TXROMHD
JSR TXBLOCK
>>> LDI16.START;DISKPROM
>>> LDI16.LENGTH;DPROMLEN
JSR TXROMHD
JSR TXBLOCK
RTS
TXROMHD LDA START
JSR TXBYTE
LDA START+1
JSR TXBYTE
LDA LENGTH
JSR TXBYTE
LDA LENGTH+1
JSR TXBYTE
RTS
TXDISK JSR INITIOB
LDA #0
STA TRK
ML1 >>> GOTOXY.2;12
JSR CLREOP
JSR MSGOUT
ASC "READ TRACK $"
HEX 00
LDA TRK
JSR PRBYTE
JSR READTRK
>>> GOTOXY.2;12
JSR CLREOL
* JSR MSGOUT
* ASC "FIND START/END OF TRACK $"
* HEX 00
LDA TRK
JSR PRBYTE
JSR ADJUST
>>> GOTOXY.2;12
JSR CLREOL
JSR MSGOUT
ASC "TRANSMIT TRACK $"
HEX 00
LDA TRK
JSR PRBYTE
JSR TXBLOCK
INC TRK
LDA TRK
CMP #TRKNUM
BEQ TXTRTS
JMP ML1
TXTRTS RTS
* ADJUST: LOOKS FOR A USABLE
* LOOKS FOR A USABLE START AND
* END OF TRACK.
*
* PTR:=DATABUF
* START:=FINDHEAD(PTR)
* INC(PTR,MINTRKLEN)
* REPEAT
* PTR:=FINDHEAD(PTR)
* UNTIL SAMEHEAD(START,PTR)
* LENGTH:=PTR-START
* INC(PTR)
* DEC(START)
* START^:=LENGTH
* PTR^:=LENGTH
* INC(LENGTH,4)
ADJUST >>> LDI16.PTR;DATABUF
JSR FINDHEAD
>>> MOV16.START;PTR
>>> INCI16.PTR;MINTRKLEN
AL1 >>> INCI16.PTR;1
JSR FINDHEAD
JSR SAMEHEAD
BNE AL1
>>> SUB16.LENGTH;PTR;START
>>> INCI16.PTR;1
>>> DECI16.START;1
LDY #0
LDA LENGTH
STA (START),Y
STA (PTR),Y
INY
LDA LENGTH+1
STA (START),Y
STA (PTR),Y
>>> INCI16.LENGTH;4
RTS
* SAMEHEAD:
* COMPARES IF THE 8 BYTES OF
* THE HEADER AT POSITION
* (START) AND (PTR) ARE THE SAME
SAMEHEAD LDY #3
LDX #8
SL1 INY
LDA (START),Y
CMP (PTR),Y
BNE SR1
DEX
BNE SL1
SR1 RTS
* FINDHEAD:
* STARTING AT (PTR) FIND
* THE FIRST OCCURANCE OF AN
* SECTOR START
FINDHEAD EQU *
FL1 LDY #0
INC PTR
BNE FC1
INC PTR+1
BPL FC1
JMP PRERR
FC1 LDA (PTR),Y
CMP #HEAD0
BNE FL1
INY
LDA (PTR),Y
CMP #HEAD1
BNE FL1
INY
LDA (PTR),Y
CMP #HEAD2
BNE FL1
INY
LDA (PTR),Y
CMP #HEAD3
BNE FL1
LDY #12
LDA (PTR),Y
CMP #TRAIL1
BNE FL1
INY
LDA (PTR),Y
CMP #TRAIL2
BNE FL1
RTS
* READTRK
READTRK LDA TRK
LDY #TRACK
STA (IOB),Y
LDA #SEEK
LDY #COMMAND
STA (IOB),Y
JSR CALLRWTS
LDY #SLOT
LDA (IOB),Y
TAX
LDA DRMOTON,X
LDA DRINPUT,X
>>> LDI16.PTR;DATABUF
LDY #0
RTL1 LDA DRREAD,X
BPL RTL1
STA (PTR),Y
INC PTR
BNE RTL1
INC PTR+1
BPL RTL1
LDA DRMOTOFF,X
RTS
* INITIOB:
* GETIOB
* IOB^.VOLUME:=0
INITIOB JSR GETIOB
STY IOB
STA IOB+1
LDY #VOLUME
LDA #0
STA (IOB),Y
RTS
* CALLRWTS:
* GETIOB
* RWTS
* IOB^.OLDDRV:=IOB^.DRIVE
* IOB^.OLDSLOT:=IOB^.SLOT
* CARRY:=ERROR
CALLRWTS LDY IOB
LDA IOB+1
JSR RWTS
PHP
LDY #SLOT
LDA (IOB),Y
TAX
INY
LDA (IOB),Y
LDY #OLDDRV
STA (IOB),Y
TXA
DEY
STA (IOB),Y
LDY #OLDVOL
LDA (IOB),Y
LDY #VOLUME
STA (IOB),Y
PLP
RTS
* TXBLOCK
* TRANSMIT BLOCK STARTING AT
* (START) WITH LENGTH (LENGTH)
TXBLOCK >>> MOV16.PTR;START
>>> GOTOXY.0;22
JSR MSGOUT
ASC "BYTES TO TRANSFER $"
HEX 00
LDA CH
PHA
LDX LENGTH
LDA LENGTH+1
JSR PRINTAX
PLA
STA CH
TXBLOOP LDY #0
LDA (PTR),Y
JSR TXBYTE
>>> INCI16.PTR;1
>>> DECI16.LENGTH;1
LDA LENGTH
BNE TXBLOOP
LDA CH
PHA
LDA LENGTH+1
LDX #0
JSR PRINTAX
PLA
STA CH
LDA LENGTH+1
BNE TXBLOOP
RTS
DATA0 EQU $C058
DATA1 EQU DATA0+1
* TXDTIME SETS BAUD RATE:
*
* APPROXIMATE BAUD RATES..
* DEPENDING ON YOUR CLOCK
* FREQUENCY THEY WILL VARY
* SOMEWHAT, BUT NEVER DEVIATE
* MORE THAN 1% FROM THE INDICATED
* VALUE.
*
* 0 - 51000
* 1 - 41000
* 7 - 18600
* 17 - 9700
* 39 - 4750
* 81 - 2400
*
* THE CALCULATION WAS BASED ON
* 14.28 MHZ QUARZ, WHICH IS
* BETWEEN THE US (14.318) AND
* EURO (14.25) VERSION OF THE
* APPLE 2 PLUS
TXDTIME EQU 17
*TXBYTE
* TRANSMIT BYTE IN ACCUMULATOR
*
LST ON
TXBYTE LDX #10 START/STOP
LST OFF
EOR #$FF
BIT DATA1
JMP TXNXBIT
TXLOOP LSR
BCC TXZERO
LDY 0 DELAY
BIT DATA1
JMP TXNXBIT
TXZERO NOP DELAY
BIT DATA0
JMP TXNXBIT DELAY
TXNXBIT LDY #TXDTIME
TXDELAY DEY
BNE TXDELAY
DEX
BNE TXLOOP
RTS
*: MSGOUT
MSGOUT PLA
STA MSGPTR
PLA
STA MSGPTR+1
TYA
PHA
LDY #0
MOL1 INC MSGPTR
BNE SKIPADD
INC MSGPTR+1
SKIPADD LDA (MSGPTR),Y
BEQ MSGRTS
JSR COUT
JMP MOL1
MSGRTS PLA
TAY
LDA MSGPTR+1
PHA
LDA MSGPTR
PHA
RTS
END
*************************
*: HEXDEC
HEXDEC LDA #$00
STA BCD
STA BCD+1
SED
LDY #$10
HEX1 ASL WORD
ROL WORD+1
LDA BCD
ADC BCD
STA BCD
LDA BCD+1
ADC BCD+1
STA BCD+1
ROL BCD+2
DEY
BNE HEX1
CLD
RTS