home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / emulate / appleona.zoo / AmigaComm.source next >
Text File  |  1993-01-04  |  7KB  |  605 lines

  1.  LST OFF
  2.  
  3. MOV16 MAC
  4.  LDA ]2
  5.  STA ]1
  6.  LDA ]2+1
  7.  STA ]1+1
  8.  <<<
  9.  
  10. LDI16 MAC
  11.  LDA #<]2
  12.  STA ]1
  13.  LDA #>]2
  14.  STA ]1+1
  15.  <<<
  16.  
  17. DECI16 MAC
  18.  SEC
  19.  LDA ]1
  20.  SBC #<]2
  21.  STA ]1
  22.  LDA ]1+1
  23.  SBC #>]2
  24.  STA ]1+1
  25.  <<<
  26.  
  27. INCI16 MAC
  28.  CLC
  29.  LDA ]1
  30.  ADC #<]2
  31.  STA ]1
  32.  LDA ]1+1
  33.  ADC #>]2
  34.  STA ]1+1
  35.  <<<
  36.  
  37. SUB16 MAC
  38.  SEC
  39.  LDA ]2
  40.  SBC ]3
  41.  STA ]1
  42.  LDA ]2+1
  43.  SBC ]3+1
  44.  STA ]1+1
  45.  <<<
  46.  
  47. GOTOXY MAC
  48.  LDA #]1
  49.  STA CH
  50.  LDA #]2
  51.  JSR TABV
  52.  <<<
  53.  
  54. KBD EQU $C000
  55. KBDCLR EQU $C010
  56.  
  57. DR0OFF EQU $C080
  58. DR0ON EQU $C081
  59. DR1OFF EQU $C082
  60. DR1ON EQU $C083
  61. DR2OFF EQU $C084
  62. DR2ON EQU $C085
  63. DR3OFF EQU $C086
  64. DR3ON EQU $C087
  65.  
  66. DRMOTOFF EQU $C088
  67. DRMOTON EQU $C089
  68.  
  69. DR1ENA EQU $C08A
  70. DR2ENA EQU $C08B
  71.  
  72. * IF OUTPUT:
  73.  
  74. DRSTB EQU $C08C
  75. DRLOAD EQU $C08D
  76.  
  77. * IF INPUT:
  78.  
  79. DRREAD EQU DRSTB
  80. DRWPROT EQU DRLOAD
  81.  
  82. * SELECT INPUT/OUTPUT
  83.  
  84. DRINPUT EQU $C08E
  85. DROUTPUT EQU $C08F
  86.  
  87. * IOB OFFSETS
  88.  
  89. SLOT EQU 1
  90. DRIVE EQU 2
  91. VOLUME EQU 3
  92. TRACK EQU 4
  93. SECTOR EQU 5
  94. BUFFER EQU 8
  95. COMMAND EQU 12
  96. OLDVOL EQU 14
  97. OLDSLOT EQU 15
  98. OLDDRV EQU 16
  99.  
  100. SEEK EQU 0
  101. READ EQU 1
  102.  
  103. * DOS ROUTINES
  104.  
  105. DOSWARM EQU $3D0
  106. RWTS EQU $3D9
  107. GETIOB EQU $3E3
  108.  
  109. * MONITOR ROUTINES
  110.  
  111. BS EQU $8
  112. CR EQU $D
  113. NAK EQU $15
  114. ESC EQU $1B
  115.  
  116. CH EQU $24
  117. CV EQU $25
  118. BASE EQU $28
  119. CSW EQU $36
  120.  
  121. MON EQU $FF65
  122. PRERR EQU $FF2D
  123. BOOT EQU $FAA6
  124. TABV EQU $FB5B
  125. VTAB EQU $FC22
  126. HOME EQU $FC58
  127. PRINTAX EQU $F941
  128. PRBYTE EQU $FDDA
  129. PRHEX EQU $FDE3
  130. COUT EQU $FDED
  131. COUT1 EQU $FDF0
  132. CROUT EQU $FD8E
  133. CROUT1 EQU $FD8B
  134. RDKEY EQU $FD0C
  135. KEYIN EQU $FD35
  136. CLREOL EQU $FC9C
  137. CLREOP EQU $FC42
  138.  
  139. * CONSTANTS
  140.  
  141. BASICROM EQU $D000
  142. BASICLEN EQU $3000
  143. DISKPROM EQU $C600
  144. DPROMLEN EQU $0100
  145.  
  146. DATABUF EQU $4000
  147. HEAD0 EQU $FF
  148. HEAD1 EQU $D5
  149. HEAD2 EQU $AA
  150. HEAD3 EQU $96
  151. MINTRKLEN EQU 5500
  152. TRAIL1 EQU $DE
  153. TRAIL2 EQU $AA
  154. TRKNUM EQU 35
  155.  
  156. * VARIABLES
  157.  
  158. PTR EQU $FE
  159. START EQU $FC
  160. LENGTH EQU $FA
  161. IOB EQU $F8
  162. TRK EQU $F7
  163. MSGPTR EQU $F5
  164.  
  165. * MAIN
  166.  
  167.  ORG $8000
  168.  
  169. MAIN JSR HOME
  170.  LDA DATA0
  171.  JSR MSGOUT
  172.  INV " AMIGACOMM V0.1, 1992 BY CLAUDIO NIEDER "
  173.  HEX 00
  174.  >>> GOTOXY.5;8
  175.  JSR MSGOUT
  176.  ASC "R - SEND BASIC/DISK (P)ROM"
  177.  HEX 00
  178.  >>> GOTOXY.5;10
  179.  JSR MSGOUT
  180.  ASC "D - SEND DISK"
  181.  HEX 00
  182.  >>> GOTOXY.5;14
  183.  JSR MSGOUT
  184.  ASC "H - HELP"
  185.  HEX 00
  186.  >>> GOTOXY.5;18
  187.  JSR MSGOUT
  188.  ASC "Q - QUIT"
  189.  HEX 00
  190. MAINL1 LDA KBD
  191.  BPL MAINL1
  192.  BIT KBDCLR
  193.  CMP #"R"
  194.  BEQ TOROM
  195.  CMP #"D"
  196.  BEQ TODISK
  197.  CMP #"H"
  198.  BEQ TOHELP
  199.  CMP #"Q"
  200.  BNE MAINL1
  201.  JSR HOME
  202.  JMP DOSWARM
  203.  
  204. TOHELP JMP TOHELP2
  205.  
  206. TOROM >>> GOTOXY.0;2
  207.  JSR CLREOP
  208.  >>> GOTOXY.5;9
  209.  JSR MSGOUT
  210.  ASC "TRANSFERRING BASIC ROM AND"
  211.  HEX 00
  212.  >>> GOTOXY.5;11
  213.  JSR MSGOUT
  214.  ASC "DISK PROM TO AMIGA"
  215.  HEX 00
  216.  JSR TXROM
  217.  JMP MAIN
  218.  
  219. TODISK >>> GOTOXY.0;2
  220.  JSR CLREOP
  221.  >>> GOTOXY.5;9
  222.  JSR MSGOUT
  223.  ASC "TRANSFER DISK TO AMIGA"
  224.  HEX 00
  225.  JSR TXDISK
  226.  JMP MAIN
  227.  
  228. TOHELP2 >>> GOTOXY.0;2
  229.  JSR CLREOP
  230.  JSR MSGOUT
  231.  HEX 8D8D
  232.  ASC "WITH THIS PROGRAM YOU CAN TRANSMIT THE"
  233.  HEX 8D
  234.  ASC "CONTENTS OF THE BASIC/MONITOR ROM AND"
  235.  HEX 8D
  236.  ASC "YOUR DISKS TO HE AMIGA, SO YOU CAN USE"
  237.  HEX 8D
  238.  ASC "THE APPLE 2 EMULATOR THERE."
  239.  HEX 8D8D
  240.  ASC "R) EXPECTS YOU HAVE A DISK CONROLLER IN"
  241.  HEX 8D
  242.  ASC "   SLOT 6, AND TRANSMITS $C600-$C6FF"
  243.  HEX 8D
  244.  ASC "   AND $D000-$FFFF TO THE AMIGA"
  245.  HEX 8D8D
  246.  ASC "D) TRANSMITS THE CONTENTS OF THE DISK"
  247.  HEX 8D
  248.  ASC "   IN THE CURRENT DRIVE TO THE AMIGA"
  249.  HEX 8D
  250.  ASC "   YOU CAN'T CHANGE SLOT/DRIVE"
  251.  HEX 8D8D8D
  252.  ASC "PRESS ANY KEY TO RETURN TO MAIN MENU"
  253.  HEX 00
  254. THL1 BIT KBD
  255.  BPL THL1
  256.  BIT KBDCLR
  257.  JMP MAIN
  258.  
  259. TXROM >>> LDI16.LENGTH;BASICLEN
  260.  >>> LDI16.START;BASICROM
  261.  JSR TXROMHD
  262.  JSR TXBLOCK
  263.  >>> LDI16.START;DISKPROM
  264.  >>> LDI16.LENGTH;DPROMLEN
  265.  JSR TXROMHD
  266.  JSR TXBLOCK
  267.  RTS
  268.  
  269. TXROMHD LDA START
  270.  JSR TXBYTE
  271.  LDA START+1
  272.  JSR TXBYTE
  273.  LDA LENGTH
  274.  JSR TXBYTE
  275.  LDA LENGTH+1
  276.  JSR TXBYTE
  277.  RTS
  278.  
  279. TXDISK JSR INITIOB
  280.  LDA #0
  281.  STA TRK
  282. ML1 >>> GOTOXY.2;12
  283.  JSR CLREOP
  284.  JSR MSGOUT
  285.  ASC "READ TRACK $"
  286.  HEX 00
  287.  LDA TRK
  288.  JSR PRBYTE
  289.  JSR READTRK
  290.  >>> GOTOXY.2;12
  291.  JSR CLREOL
  292. * JSR MSGOUT
  293. * ASC "FIND START/END OF TRACK $"
  294. * HEX 00
  295.  LDA TRK
  296.  JSR PRBYTE
  297.  JSR ADJUST
  298.  >>> GOTOXY.2;12
  299.  JSR CLREOL
  300.  JSR MSGOUT
  301.  ASC "TRANSMIT TRACK $"
  302.  HEX 00
  303.  LDA TRK
  304.  JSR PRBYTE
  305.  JSR TXBLOCK
  306.  INC TRK
  307.  LDA TRK
  308.  CMP #TRKNUM
  309.  BEQ TXTRTS
  310.  JMP ML1
  311. TXTRTS RTS
  312.  
  313. * ADJUST: LOOKS FOR A USABLE
  314. *  LOOKS FOR A USABLE START AND
  315. *  END OF TRACK.
  316. *
  317. * PTR:=DATABUF
  318. * START:=FINDHEAD(PTR)
  319. * INC(PTR,MINTRKLEN)
  320. * REPEAT
  321. *  PTR:=FINDHEAD(PTR)
  322. * UNTIL SAMEHEAD(START,PTR)
  323. * LENGTH:=PTR-START
  324. * INC(PTR)
  325. * DEC(START)
  326. * START^:=LENGTH
  327. * PTR^:=LENGTH
  328. * INC(LENGTH,4)
  329.  
  330. ADJUST >>> LDI16.PTR;DATABUF
  331.  JSR FINDHEAD
  332.  >>> MOV16.START;PTR
  333.  >>> INCI16.PTR;MINTRKLEN
  334. AL1 >>> INCI16.PTR;1
  335.  JSR FINDHEAD
  336.  JSR SAMEHEAD
  337.  BNE AL1
  338.  >>> SUB16.LENGTH;PTR;START
  339.  >>> INCI16.PTR;1
  340.  >>> DECI16.START;1
  341.  LDY #0
  342.  LDA LENGTH
  343.  STA (START),Y
  344.  STA (PTR),Y
  345.  INY
  346.  LDA LENGTH+1
  347.  STA (START),Y
  348.  STA (PTR),Y
  349.  >>> INCI16.LENGTH;4
  350.  RTS
  351.  
  352. * SAMEHEAD:
  353. *  COMPARES IF THE 8 BYTES OF
  354. *  THE HEADER AT POSITION
  355. *  (START) AND (PTR) ARE THE SAME
  356.  
  357. SAMEHEAD LDY #3
  358.  LDX #8
  359. SL1 INY
  360.  LDA (START),Y
  361.  CMP (PTR),Y
  362.  BNE SR1
  363.  DEX
  364.  BNE SL1
  365. SR1 RTS
  366.  
  367.  
  368. * FINDHEAD:
  369. *  STARTING AT (PTR) FIND
  370. *  THE FIRST OCCURANCE OF AN
  371. *  SECTOR START
  372.  
  373. FINDHEAD EQU *
  374. FL1 LDY #0
  375.  INC PTR
  376.  BNE FC1
  377.  INC PTR+1
  378.  BPL FC1
  379.  JMP PRERR
  380. FC1 LDA (PTR),Y
  381.  CMP #HEAD0
  382.  BNE FL1
  383.  INY
  384.  LDA (PTR),Y
  385.  CMP #HEAD1
  386.  BNE FL1
  387.  INY
  388.  LDA (PTR),Y
  389.  CMP #HEAD2
  390.  BNE FL1
  391.  INY
  392.  LDA (PTR),Y
  393.  CMP #HEAD3
  394.  BNE FL1
  395.  LDY #12
  396.  LDA (PTR),Y
  397.  CMP #TRAIL1
  398.  BNE FL1
  399.  INY
  400.  LDA (PTR),Y
  401.  CMP #TRAIL2
  402.  BNE FL1
  403.  RTS
  404.  
  405. * READTRK
  406.  
  407. READTRK LDA TRK
  408.  LDY #TRACK
  409.  STA (IOB),Y
  410.  LDA #SEEK
  411.  LDY #COMMAND
  412.  STA (IOB),Y
  413.  JSR CALLRWTS
  414.  LDY #SLOT
  415.  LDA (IOB),Y
  416.  TAX
  417.  LDA DRMOTON,X
  418.  LDA DRINPUT,X
  419.  >>> LDI16.PTR;DATABUF
  420.  LDY #0
  421. RTL1 LDA DRREAD,X
  422.  BPL RTL1
  423.  STA (PTR),Y
  424.  INC PTR
  425.  BNE RTL1
  426.  INC PTR+1
  427.  BPL RTL1
  428.  LDA DRMOTOFF,X
  429.  RTS
  430.  
  431. * INITIOB:
  432. * GETIOB
  433. * IOB^.VOLUME:=0
  434.  
  435. INITIOB JSR GETIOB
  436.  STY IOB
  437.  STA IOB+1
  438.  LDY #VOLUME
  439.  LDA #0
  440.  STA (IOB),Y
  441.  RTS
  442.  
  443.  
  444. * CALLRWTS:
  445. * GETIOB
  446. * RWTS
  447. * IOB^.OLDDRV:=IOB^.DRIVE
  448. * IOB^.OLDSLOT:=IOB^.SLOT
  449. * CARRY:=ERROR
  450.  
  451. CALLRWTS LDY IOB
  452.  LDA IOB+1
  453.  JSR RWTS
  454.  PHP
  455.  LDY #SLOT
  456.  LDA (IOB),Y
  457.  TAX
  458.  INY
  459.  LDA (IOB),Y
  460.  LDY #OLDDRV
  461.  STA (IOB),Y
  462.  TXA
  463.  DEY
  464.  STA (IOB),Y
  465.  LDY #OLDVOL
  466.  LDA (IOB),Y
  467.  LDY #VOLUME
  468.  STA (IOB),Y
  469.  PLP
  470.  RTS
  471.  
  472. * TXBLOCK
  473. *  TRANSMIT BLOCK STARTING AT
  474. *  (START) WITH LENGTH (LENGTH)
  475.  
  476. TXBLOCK >>> MOV16.PTR;START
  477.  >>> GOTOXY.0;22
  478.  JSR MSGOUT
  479.  ASC "BYTES TO TRANSFER $"
  480.  HEX 00
  481.  LDA CH
  482.  PHA
  483.  LDX LENGTH
  484.  LDA LENGTH+1
  485.  JSR PRINTAX
  486.  PLA
  487.  STA CH
  488. TXBLOOP LDY #0
  489.  LDA (PTR),Y
  490.  JSR TXBYTE
  491.  >>> INCI16.PTR;1
  492.  >>> DECI16.LENGTH;1
  493.  LDA LENGTH
  494.  BNE TXBLOOP
  495.  LDA CH
  496.  PHA
  497.  LDA LENGTH+1
  498.  LDX #0
  499.  JSR PRINTAX
  500.  PLA
  501.  STA CH
  502.  LDA LENGTH+1
  503.  BNE TXBLOOP
  504.  RTS
  505.  
  506. DATA0 EQU $C058
  507. DATA1 EQU DATA0+1
  508.  
  509. * TXDTIME SETS BAUD RATE:
  510. *
  511. * APPROXIMATE BAUD RATES..
  512. * DEPENDING ON YOUR CLOCK
  513. * FREQUENCY THEY WILL VARY
  514. * SOMEWHAT, BUT NEVER DEVIATE
  515. * MORE THAN 1% FROM THE INDICATED
  516. * VALUE.
  517. *
  518. * 0 - 51000
  519. * 1 - 41000
  520. * 7 - 18600
  521. * 17 - 9700
  522. * 39 - 4750
  523. * 81 - 2400
  524. *
  525. * THE CALCULATION WAS BASED ON
  526. * 14.28 MHZ QUARZ, WHICH IS
  527. * BETWEEN THE US (14.318) AND
  528. * EURO (14.25) VERSION OF THE
  529. * APPLE 2 PLUS
  530.  
  531. TXDTIME EQU 17
  532.  
  533. *TXBYTE
  534. * TRANSMIT BYTE IN ACCUMULATOR
  535. *
  536.  LST ON
  537. TXBYTE LDX #10 START/STOP
  538.  LST OFF
  539.  EOR #$FF
  540.  BIT DATA1
  541.  JMP TXNXBIT
  542. TXLOOP LSR
  543.  BCC TXZERO
  544.  LDY 0 DELAY
  545.  BIT DATA1
  546.  JMP TXNXBIT
  547. TXZERO NOP  DELAY
  548.  BIT DATA0
  549.  JMP TXNXBIT DELAY
  550. TXNXBIT LDY #TXDTIME
  551. TXDELAY DEY
  552.  BNE TXDELAY
  553.  DEX
  554.  BNE TXLOOP
  555.  RTS
  556.  
  557. *: MSGOUT
  558.  
  559. MSGOUT PLA
  560.  STA MSGPTR
  561.  PLA
  562.  STA MSGPTR+1
  563.  TYA
  564.  PHA
  565.  LDY #0
  566. MOL1 INC MSGPTR
  567.  BNE SKIPADD
  568.  INC MSGPTR+1
  569. SKIPADD LDA (MSGPTR),Y
  570.  BEQ MSGRTS
  571.  JSR COUT
  572.  JMP MOL1
  573. MSGRTS PLA
  574.  TAY
  575.  LDA MSGPTR+1
  576.  PHA
  577.  LDA MSGPTR
  578.  PHA
  579.  RTS
  580.  
  581.  END
  582.  
  583. *************************
  584.  
  585. *: HEXDEC
  586.  
  587. HEXDEC LDA #$00
  588.  STA BCD
  589.  STA BCD+1
  590.  SED
  591.  LDY #$10
  592. HEX1 ASL WORD
  593.  ROL WORD+1
  594.  LDA BCD
  595.  ADC BCD
  596.  STA BCD
  597.  LDA BCD+1
  598.  ADC BCD+1
  599.  STA BCD+1
  600.  ROL BCD+2
  601.  DEY
  602.  BNE HEX1
  603.  CLD
  604.  RTS
  605.