home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol040 / host.prn < prev    next >
Encoding:
Text File  |  1984-04-29  |  20.4 KB  |  479 lines

  1. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0001
  2. *** HOST *** 
  3.  
  4.                   0001  ; HOST Program for AMD 96-4016 Z8000 Monitor
  5.                   0002  ;
  6.                   0003  ; Sourced March '80 by     Trevor Marshall
  7.                   0004  ;            Elec Eng Dept
  8.                   0005  ;            Uni W.A.
  9.                   0006  ;
  10.                   0007  ; This program was written for a Z80 CPU
  11.                   0008  ; running a CDOS 2.17 Disk Operating System.
  12.                   0009  ;
  13.                   0010  ; It has been modified for 8080 CPU 
  14.                   0011  ; but not fully tested with that CPU
  15.                   0012  ;
  16.                   0013  ; Most code is compatible with other CP/M
  17.                   0014  ; systems, but will have to be tailored
  18.                   0015  ; to the individual's hardware environment
  19.                   0016  ;
  20.                   0017  ; Although the AMD SYS 8/8 uses parallel
  21.                   0018  ;  ports for handshaking the 96-4016 will also
  22.                   0019  ;  support serial I/O and this method is
  23.                   0020  ;  usually preferable.
  24.                   0021  ; The AMD Monitor uses an 8 bit data word with
  25.                   0022  ;  parity generated in software.
  26.                   0023  ; If you cannot configure your HOST USART
  27.                   0024  ;  to that format then you must null the 
  28.                   0025  ;  parity generation with NOPs and the parity
  29.                   0026  ;  checking may be defeated with a prior RET
  30.                   0027  ; Note that the AMD SYS 8/8 appears to have a
  31.                   0028  ;  CP/M compatible operating system
  32.                   0029  ;
  33.       (0005)      0030  BDOS:    EQU    5    ;CDOS system call addr
  34.       (0014)      0031  RNEXT:    EQU    14H    ;Read next record
  35.       (0015)      0032  WNEXT:    EQU    15H    ;Write next record
  36.       (0016)      0033  FCREATE: EQU    16H    ;Create a file
  37.       (000D)      0034  RESET:    EQU    0DH    ;Reset CDOS
  38.       (000F)      0035  FOPEN:    EQU    0FH    ;Open a file
  39.       (0010)      0036  FCLOSE:    EQU    10H    ;Close a file
  40.       (001A)      0037  DMA:    EQU    1AH    ;Set disk buffer address
  41.       (0086)      0038  FORMAT: EQU    86H    ;Format name to FCB
  42.       (0015)      0039  NAK:    EQU    15H    ;CTL-U
  43.       (0005)      0040  ENQ:    EQU    5    ;CTL-E
  44.       (0006)      0041  ACK:    EQU    6    ;CTL-F
  45.       (0001)      0042  SOH    EQU    1    ;CTL-A
  46.       (0002)      0043  STX:    EQU    2    ;CTL-B    
  47.       (0004)      0044  EOT:    EQU    4    ;CTL-D
  48.       (001A)      0045  EOF:    EQU    1AH    ;End of file marker byte
  49.                   0046  ;
  50.                   0047  ;THE FOLLOWING EQUATES ARE HARDWARE DEPENDENT
  51.                   0048  ;
  52.       (00F7)      0049  CSTATP: EQU    0F7H    ;Console driver status port
  53.       (00F6)      0050  CDATA:    EQU    0F6H    ;Console data port
  54.       (0002)      0051  CRDA:    EQU    2    ;RDA bit
  55.       (0001)      0052  CTBE:    EQU    1    ;TBE bit
  56.                   0053  ;
  57.       (0100)      0054      ORG    100H
  58.                   0055  ;
  59. 0100  318000      0056  START:    LD    SP,80H
  60. 0103  3E00        0057      LD    A,0
  61. 0105  32DD04      0058      LD    (FLAG),A ;Clear the file opened flag
  62.                   0059  ; Now output system prompt to console
  63. 0108  11AD03      0060      LD    DE,MSG
  64. 010B  0E09        0061      LD    C,9    ;Print Buffered Line
  65. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0002
  66. *** HOST *** 
  67.  
  68. 010D  CD0500      0062      CALL    BDOS
  69.                   0063  ;
  70. 0110  318000      0064  MORE:    LD    SP,80H    ;Reset Stack Pointer
  71. 0113  3E00        0065      LD    A,0
  72. 0115  32DC04      0066      LD    (CODE),A ;Clear the error code
  73. 0118  CD8402      0067      CALL    DIALOG    ;Wait for an instruction
  74. 011B  3ABA04      0068      LD    A,(NEWCODE) ;2 locs to ease debugging
  75. 011E  32B904      0069      LD    (CURCODE),A    ;Save it
  76.                   0070  ; Now decode the Function request type
  77. 0121  FE04        0071      CP    A,4
  78. 0123  CA5901    R 0072      JP    Z,OPEN
  79. 0126  FE05        0073      CP    A,5
  80. 0128  CAA601    R 0074      JP    Z,CLOSE
  81. 012B  FE06        0075      CP    A,6
  82. 012D  CA2302      0076      JP      Z,CREATE
  83. 0130  FE07        0077      CP    A,7
  84. 0132  CADB01      0078      JP    Z,READ
  85. 0135  FE08        0079      CP    A,8
  86. 0137  CA7901    R 0080      JP    Z,WRITE
  87.                   0081  ;
  88. 013A  C3C601      0082      JP    N7    ;If not one of the above instrs
  89.                   0083  ;
  90.                   0084  ; S/R to set up FCB name in FCB block from BFFR data
  91.                   0085  ;
  92. 013D  3A2C04      0086  SETUP    LD    A,(REQBFFR) ;Fetch the drive (A - C)
  93. 0140  D640        0087      SUB    A,40H    ;A = 01 IN FCB
  94. 0142  322D04      0088      LD    (REQBFFR+1),A ;Put drive # in FCB
  95. 0145  212D04      0089      LD    HL,REQBFFR+1 ;Point at start of legal co
  96.             de
  97. 0148  11BB04      0090      LD    DE,FCB    ;Point at FCB area
  98. 014B  010C00      0091      LD    BC,12    ;# of bytes in name & drive
  99.                   0092  ;    LDIR        ;Shift name to FCB
  100.                   0093  ; implement the LDIR in 8080 code:
  101. 014E  7E          0094  L1:    LD    A,(HL)    ;***** THIS CODE HAS NOT
  102. 014F  12          0095      LD    (DE),A    ;   BEEN CHECKED******
  103. 0150  23          0096      INC    HL
  104. 0151  13          0097      INC    DE
  105. 0152  0B          0098      DEC    BC
  106. 0153  79          0099      LD    A,C    ;Is BC = 0
  107. 0154  B0          0100      OR    A,B
  108. 0155  C24E01    R 0101      JP    NZ,L1
  109.                   0102  ;
  110. 0158  C9          0103      RET
  111.                   0104  ;
  112.                   0105  ;Now try to open file
  113. 0159  0E0D        0106  OPEN:    LD    C,RESET
  114. 015B  CD0500      0107      CALL    BDOS    ;First log off all disks
  115. 015E  CD3D01      0108      CALL    SETUP   ;Set up FCB
  116. 0161  11BB04      0109      LD    DE,FCB
  117. 0164  0E0F        0110      LD    C,FOPEN
  118. 0166  CD0500      0111      CALL    BDOS    ;Open file
  119.                   0112  ; Any errors?
  120. 0169  C601        0113      ADD    A,1    ;Is a = -1 ?
  121. 016B  CAC601    R 0114      JP    Z,N7
  122.                   0115  ; Opened successfully, now can process read or write
  123. 016E  3EFF        0116      LD    A,0FFH
  124. 0170  32DD04      0117      LD    (FLAG),A ;Set opened flag
  125. 0173  CD7303      0118      CALL    TRNS    ;Acknowledge
  126. 0176  C31001    R 0119      JP    MORE    ;Get next instruction
  127.                   0120  ;
  128. 0179  3ADD04      0121  WRITE:    LD    A,(FLAG) ;Check file is created or open
  129. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0003
  130. *** HOST *** 
  131.  
  132. 017C  FE00        0122      CP    A,0
  133. 017E  CAD001    R 0123      JP    Z,N5 ;no, send error code 3
  134.                   0124  ; Now set the DMA address to BFFR
  135. 0181  0E1A        0125      LD    C,DMA
  136. 0183  113904      0126      LD    DE,BFFR
  137. 0186  CD0500      0127      CALL    BDOS
  138.                   0128  ;
  139. 0189  11BB04      0129      LD    DE,FCB
  140. 018C  0E15        0130      LD    C,WNEXT
  141. 018E  CD0500      0131      CALL    BDOS    ;Write the record
  142. 0191  FE01        0132      CP    A,1    ;entry error
  143. 0193  CAD001    R 0133      JP    Z,N5    ; send code 3
  144. 0196  FE02        0134      CP    A,2
  145. 0198  CAC601    R 0135      JP    Z,N7    ;Send code 1 if out of space
  146. 019B  FE00        0136      CP    0    ;OK
  147. 019D  C2CB01    R 0137      JP    NZ,N8    ;Send code 2 for other errors
  148.                   0138  ; Must be OK,wait for next instruction
  149. 01A0  CD7303      0139      CALL    TRNS
  150. 01A3  C31001      0140      JP    MORE
  151.                   0141  ;
  152. 01A6  3ADD04      0142  CLOSE:    LD    A,(FLAG) ;Dont close an unopened file
  153. 01A9  FE00        0143      CP    0
  154. 01AB  CAD001    R 0144      JP    Z,N5    ;not open
  155. 01AE  0E10        0145      LD    C,FCLOSE
  156. 01B0  11BB04      0146      LD    DE,FCB
  157. 01B3  CD0500      0147      CALL    BDOS
  158. 01B6  FEFF        0148      CP    A,0FFH
  159. 01B8  CAC601    R 0149      JP    Z,N7    ;A=FF means not found
  160. 01BB  3E00        0150      LD    A,0
  161. 01BD  32DD04      0151      LD    (FLAG),A ;Clear the open file flag
  162. 01C0  32DC04      0152      LD    (CODE),A ;Clr error flag
  163. 01C3  C3D501    R 0153      JP    N10
  164. 01C6  3E01        0154  N7:    LD    A,1    ;Send error code 1
  165. 01C8  C3D201    R 0155      JP    N6
  166. 01CB  3E02        0156  N8:    LD    A,2    ;Send error code 2
  167. 01CD  C3D201    R 0157      JP    N6
  168. 01D0  3E03        0158  N5:    LD    A,3    ;Send error code 3
  169. 01D2  32DC04      0159  N6:    LD    (CODE),A ;File not open or created
  170. 01D5  CD7303      0160  N10:    CALL    TRNS
  171.                   0161  ; Omit the following for 8080 CP/M
  172.                   0162  ;    LD    C,96H    ;Call to CDOS 2.17 to turn
  173.                   0163  ;    CALL    BDOS    ; drive motors off
  174. 01D8  C31001      0164      JP    MORE
  175.                   0165  ;
  176. 01DB  3ADD04      0166  READ:    LD    A,(FLAG) ;Is file open ?
  177. 01DE  FE00        0167      CP    0
  178. 01E0  C2FD01    R 0168      JP    NZ,N2 ;Yes
  179. 01E3  0E0D        0169      LD    C,RESET    ;No,open it
  180. 01E5  CD0500      0170      CALL    BDOS
  181. 01E8  CD3D01      0171      CALL    SETUP
  182. 01EB  11BB04      0172      LD    DE,FCB
  183. 01EE  0E0F        0173      LD    C,FOPEN
  184. 01F0  CD0500      0174      CALL    BDOS
  185. 01F3  C601        0175      ADD    A,1
  186. 01F5  CAD001    R 0176      JP    Z,N5   ;type 3 error, not found
  187. 01F8  3EFF        0177      LD    A,0FFH
  188. 01FA  32DD04      0178      LD    (FLAG),A ;Set open flag
  189.                   0179  ; File opened now read record
  190. 01FD  0E1A        0180  N2:    LD    C,DMA    ;set CDOS DMA addr to bffr
  191. 01FF  113904      0181      LD    DE,BFFR
  192. 0202  CD0500      0182      CALL    BDOS
  193. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0004
  194. *** HOST *** 
  195.  
  196. 0205  0E14        0183      LD    C,RNEXT    ;read next record
  197. 0207  11BB04      0184      LD    DE,FCB
  198. 020A  CD0500      0185      CALL    BDOS
  199.                   0186  ; Now process error codes
  200. 020D  FE00        0187      CP    0    ;1 = <EOF>
  201. 020F  CA1D02    R 0188      JP    Z,M1  
  202.                   0189  ; Must be 1, End Of File
  203.                   0190  ; Note that this error is only returned AFTER an
  204.                   0191  ; abortive attempt to fetch the next sector, and
  205.                   0192  ; <EOF> within data is transferred normally, so
  206.                   0193  ; ASM will give errors unless a QUIT instruction
  207.                   0194  ; is used to end the source file.
  208. 0212  3E01        0195      LD    A,1
  209. 0214  32DC04      0196      LD    (CODE),A
  210. 0217  CD7303      0197      CALL    TRNS    ;Dont send any data
  211. 021A  C31001      0198      JP    MORE
  212. 021D  CD0C03      0199  M1:    CALL    SEND    ;Transmit normal data
  213. 0220  C31001      0200      JP    MORE
  214.                   0201  ;
  215. 0223  3ADD04      0202  CREATE:    LD    A,(FLAG) ;Is file open?
  216. 0226  FE00        0203      CP    0
  217. 0228  C2D001    R 0204      JP    NZ,N5    ;Yes send error code 3
  218. 022B  0E0D        0205      LD    C,RESET    ;Log off all disks
  219. 022D  CD0500      0206      CALL    BDOS    ;Prior to directory operations
  220. 0230  CD3D01      0207      CALL    SETUP
  221.                   0208  ; First check if a file already exists with this name
  222.                   0209  ; Dont delete it,as it may be a mistaken command
  223. 0233  11BB04      0210      LD    DE,FCB
  224. 0236  0E11        0211      LD    C,11H    ;Search Directory cmd
  225. 0238  CD0500      0212      CALL    BDOS
  226. 023B  FEFF        0213      CP    A,0FFH    
  227. 023D  CA4602    R 0214      JP    Z,MI3    ;Entry was not found
  228. 0240  7E          0215      LD    A,(HL)    ;Fetch the first directory byte
  229. 0241  FEE5        0216      CP    A,0E5H    ;Is it erased
  230. 0243  C2D001    R 0217      JP    NZ,N5    ;No, send error
  231. 0246  0E16        0218  MI3:    LD    C,FCREATE
  232. 0248  11BB04      0219      LD    DE,FCB
  233. 024B  CD0500      0220      CALL    BDOS
  234. 024E  FEFF        0221      CP    A,0FFH
  235. 0250  CAC601      0222      JP    Z,N7    ;Send error code 1
  236. 0253  CD7303      0223      CALL    TRNS
  237. 0256  3EFF        0224      LD    A,0FFH
  238. 0258  32DD04      0225      LD    (FLAG),A ;Set the open flag
  239. 025B  C31001      0226      JP    MORE
  240.                   0227  ;
  241.                   0228  ;
  242.                   0229  ; S/R to accomplish I/O
  243.                   0230  ; N.B. THESE WILL BE HARDWARE DEPENDENT
  244. 025E  DBF7        0231  CSTAT:    IN    A,CSTATP
  245. 0260  E602        0232      AND    CRDA
  246. 0262  C8          0233      RET    Z
  247. 0263  3EFF        0234      LD    A,-1
  248. 0265  C9          0235      RET
  249.                   0236  ;
  250. 0266  CD5E02      0237  CHIN:    CALL    CSTAT
  251. 0269  CA6602    R 0238      JP    Z,CHIN
  252. 026C  DBF6        0239      IN    A,CDATA
  253. 026E  E67F        0240      AND    7FH    ;Strip off parity bit
  254. 0270  C9          0241      RET
  255.                   0242  ;
  256. 0271  DBF7        0243  CRDY:    IN    A,CSTATP
  257. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0005
  258. *** HOST *** 
  259.  
  260. 0273  E601        0244      AND    CTBE
  261. 0275  C8          0245      RET    Z
  262. 0276  3EFF        0246      LD    A,-1
  263. 0278  C9          0247      RET
  264.                   0248  ;
  265. 0279  F5          0249  COUT:    PUSH    AF
  266. 027A  CD7102      0250  C1:    CALL    CRDY
  267. 027D  CA7A02    R 0251      JP    Z,C1
  268. 0280  F1          0252      POP    AF
  269. 0281  D3F6        0253      OUT    CDATA,A
  270. 0283  C9          0254      RET
  271.                   0255  ;
  272.                   0256  ;
  273.                   0257  ; S/R DIALOG to talk to Z8000
  274. 0284  21FFFF      0258  DIALOG: LD    HL,0FFFFH ;Load a delay value to HL
  275.                   0259  ; We will decrement HL until 0, then switch the
  276.                   0260  ; disk drive motors off
  277. 0287  CD5E02      0261  DI1:    CALL    CSTAT
  278. 028A  C29E02    R 0262      JP    NZ,DIA2 ;Have input,exit motor loop
  279. 028D  2B          0263      DEC    HL
  280. 028E  7D          0264      LD    A,L    ;No flag setting after DEC HL
  281. 028F  B4          0265      OR    H
  282. 0290  C28702    R 0266      JP    NZ,DI1    ;Try the loop again
  283.                   0267  ; Have now waited long enough, assume Z8000 done
  284.                   0268  ;    LD    C,96H    ;Call to CDOS 2.17 to turn
  285.                   0269  ;    CALL    BDOS    ; drive motors off
  286. 0293  C39E02    R 0270      JP    DIA2
  287. 0296  3E15        0271  KNACK:    LD    A,NAK
  288. 0298  CD7902      0272      CALL    COUT
  289. 029B  C38402    R 0273      JP    DIALOG ;Service motors
  290. 029E  CD6602      0274  DIA2:    CALL    CHIN
  291. 02A1  FE05        0275      CP    ENQ
  292. 02A3  C29602    R 0276      JP    NZ,KNACK ;Only <ENQ> is valid
  293. 02A6  3E06        0277  ACKNL:    LD    A,ACK
  294. 02A8  CD7902      0278      CALL    COUT
  295. 02AB  212C04      0279  RECVE:    LD    HL,REQBFFR
  296. 02AE  CD6602      0280      CALL    CHIN
  297. 02B1  FE01        0281      CP    SOH    ;Answer should be <SOH>
  298. 02B3  C20103    R 0282      JP    NZ,FLUSH
  299. 02B6  CD6602      0283      CALL    CHIN    ;FUNCTION REQUEST CODE 
  300. 02B9  D630        0284      SUB    A,30H
  301. 02BB  32BA04      0285      LD    (NEWCODE),A
  302.                   0286  ; We will just receive chars and store them in req bffr
  303. 02BE  CD6602      0287  RECVA:    CALL    CHIN
  304. 02C1  FE04        0288      CP    A,EOT
  305. 02C3  CAF602    R 0289      JP    Z,RECVB    ;Message ends with <EOT>
  306. 02C6  FE02        0290      CP    A,STX
  307. 02C8  CABE02    R 0291      JP    Z,RECVA    ;Discard it
  308.                   0292  ; Now process two hex bytes
  309. 02CB  D630        0293      SUB    30H    ;Pseudo-Hex format is used
  310.                   0294  ; Cabt SLA C in 8080, so rewrite
  311. 02CD  37          0295      SCF
  312. 02CE  3F          0296      CCF
  313. 02CF  17          0297      RLA
  314. 02D0  37          0298      SCF
  315. 02D1  3F          0299      CCF
  316. 02D2  17          0300      RLA
  317. 02D3  37          0301      SCF
  318. 02D4  3F          0302      CCF
  319. 02D5  17          0303      RLA
  320. 02D6  37          0304      SCF
  321. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0006
  322. *** HOST *** 
  323.  
  324. 02D7  3F          0305      CCF
  325. 02D8  17          0306      RLA
  326. 02D9  4F          0307      LD    C,A    ;Save first hex digit
  327. 02DA  CD6602      0308      CALL    CHIN
  328.                   0309  ;    SLA    C
  329.                   0310  ;    SLA    C
  330.                   0311  ;    SLA    C
  331.                   0312  ;    SLA    C
  332. 02DD  D630        0313      SUB    A,30H
  333. 02DF  E60F        0314      AND    A,0FH    ;Mask off upper nibble
  334. 02E1  81          0315      ADD    A,C    ;Now have Hex digit
  335. 02E2  77          0316      LD    (HL),A
  336. 02E3  23          0317      INC    HL
  337. 02E4  7D          0318      LD    A,L
  338. 02E5  FE39        0319      CP    REQBUFFEND AND 0FFH
  339. 02E7  C2BE02    R 0320      JP    NZ,RECVA
  340. 02EA  7C          0321      LD    A,H
  341. 02EB  FE04        0322      CP    REQBUFFEND SHR 8
  342. 02ED  C2BE02    R 0323      JP    NZ,RECVA
  343. 02F0  213904      0324      LD    HL,BFFR    ;Now point at data buffer
  344. 02F3  C3BE02    R 0325      JP    RECVA
  345.                   0326  ;
  346. 02F6  3E06        0327  RECVB:    LD    A,ACK
  347. 02F8  CD7902      0328      CALL    COUT
  348. 02FB  C9          0329      RET
  349.                   0330  ;
  350.                   0331  ;FLUSH routine to discard all input characters
  351.                   0332  ; up to the next <EOT> after an input error
  352.                   0333  ;
  353. 02FC  3E15        0334  FLUSHB:    LD    A,NAK
  354. 02FE  CD7902      0335      CALL    COUT    ;Send a <NAK>
  355. 0301  CD6602      0336  FLUSH:    CALL    CHIN 
  356. 0304  FE04        0337      CP    EOT    ;EOT means end of input
  357. 0306  C2FC02    R 0338      JP    NZ,FLUSHB ;Continue to flush
  358. 0309  C38402      0339      JP    DIALOG    ;Try to fetch the data again
  359.                   0340  ;
  360.                   0341  ; S/R to transmit code,response & data in 96-4016 format
  361.                   0342  ;
  362. 030C  3E05        0343  SEND:   LD    A,ENQ    
  363. 030E  CD7902      0344      CALL    COUT    ;Ask permission to send
  364. 0311  CD6602      0345  SENDA:     CALL    CHIN
  365. 0314  FE06        0346      CP    A,ACK    ;Must reply with <ACK>
  366. 0316  C20C03    R 0347      JP    NZ,SEND  
  367. 0319  3E01        0348  SENDB:     LD    A,SOH
  368. 031B  CD7902      0349      CALL    COUT
  369. 031E  3AB904      0350      LD    A,(CURCODE)
  370. 0321  C630        0351      ADD    A,30H
  371. 0323  CD7902      0352      CALL    COUT    ;Transmit the Function Code
  372. 0326  3E02        0353      LD    A,STX
  373. 0328  CD7902      0354      CALL    COUT
  374. 032B  3E30        0355      LD    A,'0'    ;Error codes, first is zero
  375. 032D  CD7902      0356      CALL    COUT
  376. 0330  3ADC04      0357      LD    A,(CODE) ;Second code byte
  377. 0333  C630        0358      ADD    '0'
  378. 0335  CD7902      0359      CALL    COUT
  379.                   0360  ; Now transmit text
  380. 0338  213904      0361      LD    HL,BFFR
  381. 033B  7E          0362  LP4:    LD    A,(HL)
  382. 033C  4F          0363      LD    C,A    ;Save it
  383. 033D  E6F0        0364      AND    A,0F0H
  384.                   0365  ; Cant SRA A in 8080,
  385. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0007
  386. *** HOST *** 
  387.  
  388.                   0366  ;    SRA    A
  389.                   0367  ;    SRA    A
  390.                   0368  ;    SRA    A
  391.                   0369  ;    SRA    A
  392. 033F  37          0370      SCF
  393. 0340  3F          0371      CCF
  394. 0341  1F          0372      RRA
  395. 0342  37          0373      SCF
  396. 0343  3F          0374      CCF
  397. 0344  1F          0375      RRA
  398. 0345  37          0376      SCF
  399. 0346  3F          0377      CCF
  400. 0347  1F          0378      RRA
  401. 0348  37          0379      SCF
  402. 0349  3F          0380      CCF
  403. 034A  1F          0381      RRA
  404. 034B  C630        0382      ADD    A,'0'    ;Get in Pseudo-Hex 
  405. 034D  CD7902      0383      CALL    COUT
  406. 0350  79          0384      LD    A,C
  407. 0351  E60F        0385      AND    A,0FH
  408. 0353  C630        0386      ADD    '0'
  409. 0355  CD7902      0387      CALL    COUT
  410. 0358  23          0388      INC    HL
  411. 0359  7D          0389      LD    A,L
  412. 035A  FEB9        0390      CP    [BUFFEND AND 0FFH]
  413. 035C  C23B03    R 0391      JP    NZ,LP4
  414. 035F  7C          0392      LD    A,H    ;L was equal,test H
  415. 0360  FE04        0393      CP    A,[BUFFEND SHR 8]
  416. 0362  C23B03    R 0394      JP    NZ,LP4
  417.                   0395  ;Now have finished buffer
  418. 0365  3E04        0396  J4:    LD    A,EOT
  419. 0367  CD7902      0397      CALL    COUT
  420.                   0398  ; Now wait for <ACK>
  421. 036A  CD6602      0399      CALL    CHIN
  422. 036D  FE06        0400      CP    ACK
  423. 036F  C8          0401      RET    Z
  424. 0370  C30C03    R 0402      JP    SEND  
  425.                   0403  ;
  426.                   0404  ;
  427.                   0405  ; S/R to transmit code and response only to 96-4016
  428.                   0406  ;
  429. 0373  3E05        0407  TRNS:    LD    A,ENQ    
  430. 0375  CD7902      0408      CALL    COUT    ;Ask permission to send
  431. 0378  CD6602      0409  TRNSA:    CALL    CHIN
  432. 037B  FE06        0410      CP    A,ACK    ;Must reply with <ACK>
  433. 037D  C27303    R 0411      JP    NZ,TRNS
  434. 0380  3E01        0412  TRNSB:    LD    A,SOH
  435. 0382  CD7902      0413      CALL    COUT
  436. 0385  3AB904      0414      LD    A,(CURCODE)
  437. 0388  C630        0415      ADD    A,30H
  438. 038A  CD7902      0416      CALL    COUT    ;Transmit the Function Code
  439. 038D  3E02        0417      LD    A,STX
  440. 038F  CD7902      0418      CALL    COUT
  441. 0392  3E30        0419      LD    A,'0'    ;Error codes, first is zero
  442. 0394  CD7902      0420      CALL    COUT
  443. 0397  3ADC04      0421      LD    A,(CODE) ;Second code byte
  444. 039A  C630        0422      ADD    '0'
  445. 039C  CD7902      0423      CALL    COUT
  446. 039F  3E04        0424      LD    A,EOT
  447. 03A1  CD7902      0425      CALL    COUT
  448.                   0426  ; Now wait for <ACK>
  449. CROMEMCO Z80 Macro Assembler version 03.07   Nov 30, 1980  09:21:39   Page 0008
  450. *** HOST *** 
  451.  
  452. 03A4  CD6602      0427      CALL    CHIN
  453. 03A7  FE06        0428      CP    ACK
  454. 03A9  C8          0429      RET    Z
  455. 03AA  C37303    R 0430      JP    TRNS
  456.                   0431  ;
  457. 03AD  0D0A5A38    0432  MSG:    DB    0DH,0AH,'Z8000 HOST Communication Progra
  458.             m'
  459. 03CF  20626574    0433      DB    ' between CDOS and AMD 96-4016',0DH,0AH
  460. 03EE  0D0A2020    0434      DB    0DH,0AH,'       '
  461. 03F7  436F6E74    0435      DB    'Contact Trevor Marshall for operating'
  462. 041C  2070726F    0436      DB    ' proceedures.',0DH,0AH,'$'
  463. 042C  (000D)      0437  REQBFFR DS    13
  464.       (0439)      0438  REQBUFFEND EQU    $
  465. 0439  (0080)      0439  BFFR:    DS    128
  466.       (04B9)      0440  BUFFEND EQU     $
  467. 04B9  (0001)      0441  CURCODE DS    1    ;Current operation code
  468. 04BA  (0001)      0442  NEWCODE DS    1    ;New operation code
  469. 04BB  (0021)      0443  FCB:    DS    33    ;FCB area
  470. 04DC  (0001)      0444  CODE    DS    1    ;Operation status code
  471. 04DD  (0001)      0445  FLAG    DS    1    ;0 means file is NOT OPEN
  472. 04DE  00          0446      NOP
  473. 04DF  (0100)      0447      END     START
  474.  
  475. Errors           0
  476. Range Count      41
  477. Parity Count       0
  478.  
  479.