home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / A / BIOSR4.ARC / CXEQU.LIB < prev    next >
Text File  |  1987-04-26  |  17KB  |  623 lines

  1.  
  2.  
  3. $*MACRO
  4.  
  5. false        equ    0
  6. true        equ    not false
  7. banked        equ    true
  8. EXTSYS        equ    false    ; use external system as disk and char I/O
  9. pre$release    equ    false
  10.  
  11. ; start at Jan 1,1978     78  79  80  81  82  83  84
  12. dt$hx$yr    equ    365+365+366+365+365+365+366
  13. ;    1985              1  2  3  4  5  6  7  8  9 10 11 12
  14. date$hex    equ    dt$hx$yr+31+28+31+30+31+30+31+31+30+31+30+6
  15.  
  16. date    macro
  17.     db    '6 Dec 85'
  18.     endm
  19.  
  20. ;
  21. ; boot memory map (bank 0 only)
  22. ;
  23. bios02        equ    3000h    ;
  24. block$buffer    equ    3400h    ; uses 2K
  25. boot$parm    equ    3C00h    ; uses about 256 bytes
  26. ;
  27. ; bank 0 low memory map
  28. ;
  29. ROM        equ    0000h
  30. VIC$color    equ    1000h    ; I/O page only (IO$0 selected)
  31. SYS$key$area    equ    1000h    ; 3 256 byte blocks (allow 4)
  32. screen$40    equ    1400h    ; 2 X 80 X 25 = 4000 
  33. BANK$parm$blk    equ    2400h    ; allow 0.5K of parameters
  34. BIOS8502    equ    2600h    ; 1.5K
  35. VIC$screen    equ    2C00h    ; 1K
  36. ccp$buffer    equ    3000h    ; 0c80h (allow 4K)
  37. bank0$free    equ    4000h    ; start of free area in bank 0
  38. ;
  39. ; mapped I/O locations
  40. ;
  41. VIC        equ    0D000h        ; 
  42. SID        equ    0D400h        ;
  43. MMU        equ    0D500h        ;
  44. DS8563        equ    0D600h        ; 8563
  45. VIC$C$H        equ    0D800h        ; (memory mapped only in IO$0)
  46. VIC$C$L        equ    01000h        ; (memory and i/o mapped in IO$0)
  47. CIA1        equ    0DC00h        ; 6526
  48. CIA2        equ    0DD00h        ; 6526
  49. USART        equ    0DE00h        ; 6551 (extrn card)
  50. RAM$dsk$base    equ    0DF00h        ; 8726
  51.  
  52. ;
  53. ; Common memory allocation
  54. ;
  55. int$block    equ    0FC00h    ; mode 2 interrupt pointers (to FDFDh) 
  56. parm$block    equ    0FD00h    ; system parameters
  57. @buffer        equ    0FE00h    ; disk buffer (256 bytes)
  58. ;            0FF00h    ; to 0FFFFh used by 8502
  59. ;
  60. ; the following are C128 system equates
  61. ;
  62. enable$z80    equ    0FFD0h        ; 8502 code
  63. return$z80    equ    0FFDCh
  64. enable$6502    equ    0FFE0h        ; Z80 code
  65. return$6502    equ    0FFEEh
  66.  
  67.     page
  68.                     ; 1st byte used as Intterrupt pointer
  69. vic$cmd        equ    parm$block+1    ;; bios8502 command byte
  70. vic$drv        equ    vic$cmd+1    ;  bios8502 drive (bit 0 set, drv 0)
  71. vic$trk        equ    vic$drv+1    ;; bios8502 track #
  72. vic$sect    equ    vic$trk+1    ;; bios8502 sector #
  73. vic$count    equ    vic$sect+1    ;  bios8502 sector count
  74. vic$data    equ    vic$count+1    ;; bios8502 data byte to/from
  75. cur$drv        equ    vic$data+1    ;  current disk installed to Vir. drive
  76. fast        equ    cur$drv+1    ;  bit 0 set, drv 0 is fast. ect. 
  77.  
  78. key$tbl        equ    fast+1        ;; pointer to keyboard table
  79. fun$tbl        equ    key$tbl+2    ;; pointer to function table
  80. color$tbl$ptr    equ    fun$tbl+2    ;; pointer to logical color table
  81. fun$offset    equ    color$tbl$ptr+2    ;; function # to be prepormed
  82. sound$1        equ    fun$offset+1    ;; unused
  83. sound$2        equ    sound$1+2    ;;
  84. sound$3        equ    sound$2+2    ;;
  85.  
  86. @trk        equ    sound$3+2    ;; current track number
  87. @dma        equ    @trk+2        ;; current DMA address
  88. ;
  89. ; below here not used by ROM
  90. ;
  91. @sect        equ    @dma+2        ; current sector number
  92. @cnt        equ    @sect+2        ; record count for multisector transfer
  93. @cbnk        equ    @cnt+1        ; bank for processor operations
  94. @dbnk        equ    @cbnk+1        ; bank for DMA operations
  95. @adrv        equ    @dbnk+1        ; currently selected disk drive
  96. @rdrv        equ    @adrv+1        ; controller relative disk drive
  97. ccp$count    equ    @rdrv+1        ; number of records in the CCP
  98. stat$enable    equ    ccp$count+1    ; status line enable
  99.                     ;  7 kybrd, key codes(1), functions(0)
  100.                     ;  6 40 column tracking on(0), off(1)
  101.                     ;  0 disk stat, enable(1), disable(0) 
  102. emulation$adr    equ    stat$enable+1    ; address of current emulation
  103. usart$adr    equ    emulation$adr+2    ; pointer to USART (6551) register
  104. ; CXIO equates
  105. int$hl        equ    usart$adr+2    ; interrupt HL hold location
  106. int$stack    equ    int$hl+2+20    ; currently only 5*2 used
  107. user$hl$temp    equ    int$stack    ; user function HL hold location
  108. hl$temp        equ    user$hl$temp+2    ; misc temp storage (used by VECTOR)
  109. de$temp        equ    hl$temp+2    ; misc temp storage (used by VECTOR)
  110. a$temp        equ    de$temp+2    ; misc temp storage (used by VECTOR)
  111. source$bnk    equ    a$temp+1    ; inter bank move source bank #
  112. dest$bnk    equ    source$bnk+1    ; inter bank move dest bank #
  113. MFM$tbl$ptr    equ    dest$bnk+1    ; pointer to MFM table
  114. ; 1st release end
  115. prt$conv$1    equ    MFM$tbl$ptr+2    ; not used any more
  116. prt$conv$2    equ    prt$conv$1+2    ; ditto......
  117. key$FX$function    equ    prt$conv$2+2
  118. XxD$config    equ    key$FX$function+2
  119.                     ; bit 7    0 = no parity    1 = parity
  120.                     ; bit 6    0 = mark/space    1 = odd/even
  121.                     ; bit 5    0 = space/even    1 = mark/odd
  122.  
  123.                     ; bit 1    0 = 1 stop bit    1 = 2 stop bits
  124.                     ; bit 0    0 = 7 data bits    1 = 8 data bits
  125.  
  126. RS232$status    equ    XxD$config+1    ; bit 7, 1=send data, 0=no data
  127.                     ; bit 6, 1=sending data
  128.                     ; bit 5, 1=recv que active
  129.                     ; bit 4, 1=parity error
  130.                     ; bit 3, 1=framing error
  131.                     ; bit 2, 1=recv over run (no used)
  132.                     ; bit 1, 1=receiving data
  133.                     ; bit 0, 1=Data byte ready
  134.  
  135. xmit$data    equ    RS232$status+1    ; data byte to send
  136. recv$data    equ    xmit$data+1    ; received data byte
  137.  
  138. ;
  139. ; The following equates are used by the interrupt driven keyboard handler
  140. ;
  141. int$rate    equ    recv$data+1
  142. ;
  143. ;    1st byte is a pointer into table, 2nd to 12th byte represent
  144. ;    the keyboards current state (active low), NOTE: only
  145. ;    current if key$buffer is not full
  146. ;
  147. key$scan$tbl    equ    int$rate+1
  148. ;
  149. ;    keyboard roll over buffer
  150. ;
  151. key$buf$size    equ    8*2        ; must be an even number of bytes
  152. key$get$ptr    equ    key$scan$tbl+12
  153. key$put$ptr    equ    key$get$ptr+2
  154. key$buffer    equ    key$put$ptr+2
  155. ;
  156. ;    software UART recv buffer
  157. ;
  158. RxD$buf$size    equ    64
  159. RxD$buf$count    equ    key$buffer+key$buf$size    
  160. RxD$buf$put    equ    RxD$buf$count+1
  161. RxD$buf$get    equ    RxD$buf$put+1
  162. RxD$buffer    equ    RxD$buf$get+1
  163. tick$vol    equ    RxD$buffer+RxD$buf$size
  164. ;        equ    tick$vol+1
  165.  
  166. INT$vector    equ    0FDFDh        ;; contains a JMP int$handler
  167.                     ; (in common)
  168.     page
  169. ;===> 40 column misc parm
  170. temp$1        equ    BANK$parm$blk    ;;
  171. @off40        equ    temp$1+2    ;;
  172. cur$offset    equ    @off40        ;;
  173. old$offset    equ    @off40+2    ;; 
  174. prt$flg        equ    old$offset+1    ;;
  175. flash$pos    equ    prt$flg+1    ;;
  176. ;
  177. ;===> 40 column position and color storage
  178. paint$size    equ    flash$pos+2    ;;
  179. char$adr$40    equ    paint$size+1    ;;
  180. char$col$40    equ    char$adr$40+2    ;;
  181. char$row$40    equ    char$col$40+1    ;;
  182. attr$40        equ    char$row$40+1    ;;
  183. bg$color$40    equ    attr$40+1    ;;
  184. bd$color$40    equ    bg$color$40+1    ;;
  185. rev$40        equ    bd$color$40+1    ;;
  186. ;
  187. ;===> 80 column position and color storage
  188. char$adr    equ    rev$40+1    ;;
  189. char$col    equ    char$adr+2    ;;
  190. char$row    equ    char$col+1    ;;
  191. current$atr    equ    char$row+1    ;;
  192. bg$color$80    equ    current$atr+1    ;;
  193. char$color$80    equ    bg$color$80+1    ;;
  194. ;    ROM uses localtions above this point
  195. ;
  196. ;===> Emulation parameters
  197. parm$base    equ    char$color$80+1
  198. parm$area$80    equ    parm$base+2
  199.     ;    ds    2        ; 80 column exec$adr
  200.     ;    ds    1        ; 80 column row #
  201. parm$area$40    equ    parm$area$80+3
  202.     ;    ds    2        ; 40 column exec$adr
  203.     ;    ds    1        ; 40 column row #
  204. buffer$80$col    equ    parm$area$40+3
  205. ;
  206. ;===> CXIO parameters
  207. ;    int$count not used by releases past 10 Oct 85
  208. int$count    equ    buffer$80$col+40*2    ; one added every 1/60th sec
  209. key$buf        equ    int$count+1
  210. ;
  211. ;===> CXKEYS parameters
  212. key$down$tbl    equ    key$buf+1        ; not used any more (int code)
  213. ;;;;; free space above, new interrupt driven code does not require this space 
  214. ; control$keys    equ    key$down$tbl+11*2 ; byte, not used any more (int code)
  215.  
  216. commodore$mode    equ    key$down$tbl+11*2
  217. msgptr        equ    commodore$mode+1
  218. offset        equ    msgptr+2
  219. cur$pos        equ    offset+1
  220. string$index    equ    cur$pos+1
  221. ; 1st release end (3 June 85)
  222. sys$freq    equ    string$index+1        ; -1=50Hz, 0=60Hz
  223. ; 2nd release end (1 Aug 85)
  224. ;        equ    sys$freq+1
  225.     page
  226.  
  227. ;===> temp ROM boot data storage
  228. blk$ptr$cnt    equ    32
  229. load$count    equ    boot$parm    ; number of 128 byte blocks to load
  230. ld$blk$ptr    equ    load$count+2    ; current sector dma pointer
  231. blk$unld$ptr    equ    ld$blk$ptr+2    ; read memory block (1k,2K) pointer
  232. block$size    equ    blk$unld$ptr+2    ; block size (1K=32 or 2K=64)
  233. block$end    equ    block$size+1    ; allow 48K cpm.sys to load
  234. block$ptrs    equ    block$end+2    ; end of block load buffer (+1K or +2K)
  235. info$buffer    equ    block$ptrs+blk$ptr$cnt
  236.                     ; CPM3.sys load adr's and counts
  237. ext$num        equ    info$buffer+12    ; CPM3.SYS current ext #
  238. retry        equ    ext$num+1
  239. boot$stack    equ    retry+1+64    ; allow 64 bytes of stack
  240. ;        equ    boot$stack
  241.  
  242. ;===> special equates used by CXKEY
  243. special        equ    00010111b
  244. SF$exit        equ    001h        ; RETURN KEY
  245. SF$insert    equ    028h        ; PLUS KEY
  246. SF$delete    equ    02Bh        ; MINUS KEY
  247. alpha$toggle    equ    03Dh        ; commodore key
  248. alt$key        equ    050h        ; alterant key
  249. SF$left        equ    055h        ; left arrow key
  250. lf$arrow    equ    055h        ; left arrow key
  251. SF$right    equ    056h        ; right arrow key
  252. rt$arrow    equ    056h        ; right arrow key
  253.  
  254.  
  255. buff$large    equ    25
  256. buff$small    equ    7
  257. buff$pos    equ    7
  258.  
  259.  
  260.     page
  261. ;===> External RS232 interface controls
  262. rxd$6551    equ    USART+0        ; read
  263. txd$6551    equ    USART+0        ; write
  264. status$6551    equ    USART+1        ; read
  265. reset$6551    equ    USART+1        ; write
  266. command$6551    equ    USART+2        ; read/write
  267. control$6551    equ    USART+3        ; read/write
  268. txrdy        equ    10h
  269. rxrdy        equ    08h
  270. cmd$init    equ    0bh    ; no parity, enable txd + rxd, interrupts off
  271. cntr$init$19200    equ    1Fh    ; 1 stop, 8 bits, 19200 baud 
  272. cntr$init$9600    equ    1Eh    ; 1 stop, 8 bits, 9600 baud (internal)
  273. cntr$init$600    equ    017h    ; 600 baud
  274.  
  275. ;===> memory management loactions
  276. mmu$start    equ    MMU
  277. conf$reg    equ    MMU        ; 3eh
  278. conf$reg$1     equ    MMU+1        ; 3fh
  279. conf$reg$2    equ    MMU+2        ; 7fh
  280. conf$reg$3    equ    MMU+3        ; 3eh
  281. conf$reg$4    equ    MMU+4        ; 7eh
  282. mode$reg    equ    MMU+5        ; b1h
  283. ram$reg        equ    MMU+6        ; 0bh 16K top Common
  284. page$0$l    equ    MMU+7        ; 00h
  285. page$0$h    equ    MMU+8        ; 01h
  286. page$1$l    equ    MMU+9        ; 01h    
  287. page$1$h    equ    MMU+10        ; 01h
  288. mmu$version    equ    MMU+11        ; ??h
  289.  
  290. enable$C64    equ    11110001b    ; FS=0
  291. z80$off        equ    10110001b    ; value to be write to enable 8502
  292. z80$on        equ    10110000b
  293. fast$rd$en    equ    Z80$on+0    ; fast serial read
  294. fast$wr$en    equ    Z80$on+8    ; fast serial write
  295. common$4K    equ    09h        ; top  4K common
  296. common$8K    equ    0ah        ; top  8K common
  297. common$16K    equ    0bh        ; top 16K common
  298.  
  299. ;===> preconfiguration maps
  300. force$map    equ    0ff00h
  301. bank$0        equ    0ff01h        ; 3fh
  302. bank$1        equ    0ff02h        ; 7fh
  303. io        equ    0ff03h        ; 3eh
  304. io$0        equ    0ff03h        ; 3eh
  305. io$1        equ    0ff04h        ; 7eh
  306.  
  307.     page
  308. ;===> 80 column display equates
  309. DS$index$reg    equ    DS8563
  310. DS$status$reg    equ    DS8563
  311. DS$data$reg    equ    DS8563+1
  312. ;===> register pointers
  313. DS$cursor$high    equ    14
  314. DS$cursor$low    equ    15
  315. DS$rw$ptr$high    equ    18
  316. DS$rw$ptr$low    equ    19
  317. DS$rw$data    equ    31
  318. DS$color    equ    26
  319. ;===> status bits
  320. DS$ready    equ    80h
  321. DS$lt$pen    equ    40h
  322. ;===> display memory layout  (16K) 0-3fffh 
  323. DS$screen    equ    0000h
  324. DS$attribute    equ    0800h
  325. DS$char$def    equ    2000h
  326. ;
  327. ;===> VIC equates
  328. ; vic colors
  329. black        equ    0
  330. white        equ    1
  331. red        equ    2
  332. cyan        equ    3
  333. purple        equ    4
  334. green        equ    5
  335. blue        equ    6
  336. yellow        equ    7
  337. orange        equ    8
  338. brown        equ    9
  339. lt$red        equ    10
  340. dark$grey    equ    11
  341. med$gray    equ    12
  342. lt$green    equ    13
  343. lt$blue        equ    14
  344. lt$grey        equ    15
  345.  
  346.     page
  347.  
  348. RM$status    equ    RAM$dsk$base    ;read only register
  349. ;   bit 7    Interrupt pending if 1
  350. ;    6    Transfer complete if 1
  351. ;    5    Block verify error if 1
  352. ;   note:  bits 5-7 are cleared when read
  353. ;    4    128K if 0,  512K if 1
  354. ;    3-0    Version #
  355. ;
  356. RM$command    equ    RAM$dsk$base+1    ;r/w
  357. ;   bit    7    execute per current config. if set
  358. ;    6    reserved
  359. ;    5    enable auto reload if set (restores all register to
  360. ;            value before command was done, else point to
  361. ;            next byte to read/write.)
  362. ;    4    disable FF00 decode if set (do operation after command writen)
  363. ;    3,2    reserved
  364. ;    1,0    00 = transfer C128 --> Ram Disk
  365. ;        01 = Transfer C128 <-- Ram Disk
  366. ;        10 = swap     C128 <-> Ram Disk
  367. ;        11 = Verify   C128  =  Ram Disk
  368. ;
  369. RM$128$low    equ    RAM$dsk$base+2    ;r/w
  370. ;    bits 0 to 7 of C128 address
  371. ;
  372. RM$128$mid    equ    RAM$dsk$base+3    ;r/w
  373. ;    bits 8 to 15 of the C128 address
  374. ;
  375. RM$ext$low    equ    RAM$dsk$base+4    ;r/w
  376. ;    bits 0 to 7 of Ram Disk address
  377. ;
  378. RM$ext$mid    equ    RAM$dsk$base+5    ;r/w
  379. ;    bits 8 to 15 of Ram Disk address
  380. ;
  381. RM$ext$hi    equ    RAM$dsk$base+6    ;r/w
  382. ;    bit  16       of Ram Disk address if 128K version
  383. ;    bits 16 to 18 of Ram Disk address if 512K version
  384. ;
  385. RM$count$low    equ    RAM$dsk$base+7    ;r/w
  386. ;    low byte transfer count (bits 0-7)
  387. ;
  388. RM$count$hi    equ    RAM$dsk$base+8    ;r/w
  389. ;    hi byte transfer count  (bits 8-15)
  390. ;
  391. RM$intr$mask    equ    RAM$dsk$base+9    ;r/w
  392. ;   bit    7    1=enable chip interrupts
  393. ;    6    1=enable end of block interrupts
  394. ;    5    1=enable verify error interrupts
  395. ;
  396. RM$control    equ    RAM$dsk$base+10    ;r/w
  397. ;   bit    7,6        00    Increment both addresses  (default)
  398. ;        01    Fix expansion address
  399. ;        10    Fix C128 address
  400. ;        11    Fix both addresses
  401. ;
  402.  
  403.     page
  404. ;===> CIA equates
  405.  
  406. Data$a        equ    00h
  407. Data$b        equ    01h
  408. Data$dir$a    equ    02h
  409. Data$dir$b    equ    03h
  410. timer$a$low    equ    04h
  411. timer$a$high    equ    05h
  412. timer$b$low    equ    06h
  413. timer$b$high    equ    07h
  414. tod$sec$60    equ    08h
  415. tod$sec        equ    09h
  416. tod$min        equ    0ah
  417. tod$hrs        equ    0bh
  418. sync$data    equ    0ch
  419. int$ctrl    equ    0dh
  420. cia$ctrl$a    equ    0eh
  421. cia$ctrl$b    equ    0fh
  422. CIA$hours    equ    CIA1+tod$hrs
  423.  
  424. key$row        equ    CIA1+Data$a    ; output
  425. key$col        equ    CIA1+Data$b    ; input
  426. VIC$key$row    equ    0d02fh        ; output
  427.  
  428.  
  429. data$hi        equ    4        ; RS232 data line HI
  430. data$low    equ    0        ; RS232 data line LOW
  431.  
  432. lf$shift$key    equ    80h
  433. rt$shift$key    equ    10h
  434. commodore$key    equ    20h
  435. control$key    equ    04h
  436.  
  437. type$lower    equ    0
  438. type$upper    equ    1
  439. type$shift    equ    2
  440. type$cntrl    equ    3
  441. type$field    equ    00000011b
  442.     
  443.     page
  444.  
  445. bnk1    equ    1
  446. page0    equ    0
  447. page1    equ    1
  448.  
  449. MMU$tbl$M    macro
  450.     db    3fh,3fh,7fh,3eh,7eh        ; config reg's
  451.     db    z80$on,common$8K        ; mode & mem
  452.     db    page0,bnk1,page1,bnk1        ; page reg's 
  453.     endm
  454.  
  455.     page
  456. ;
  457. ;    ROM functions
  458. ;
  459. TJMP    macro    x
  460.     rst 2 ! db x
  461.     endm
  462.  
  463. TCALL    macro    x
  464.     mvi l,x ! rst 4
  465.     endm
  466.  
  467. RJMP    macro    x
  468.     rst 3 ! db x
  469.     endm
  470.  
  471. RCALL    macro    x
  472.     mvi l,x ! rst 5
  473.     endm
  474.  
  475. FR$40            equ    2    ; offset to 40 column ROM functions
  476.  
  477. FR$wr$char        equ    00h    ; D=char auto advance
  478. FR$cursor$pos        equ    04h    ; B=row, C=column
  479. FR$cursor$up        equ    08h
  480. FR$cursor$down        equ    0Ch
  481. FR$cursor$left        equ    10h
  482. FR$cursor$rt        equ    14h
  483. FR$do$cr        equ    18h
  484. FR$CEL            equ    1Ch
  485. FR$CES            equ    20h
  486. FR$char$ins        equ    24h
  487. FR$char$del        equ    28h
  488. FR$line$ins        equ    2Ch
  489. FR$line$del        equ    30h
  490. FR$color        equ    34h    ; B=color
  491. FR$attr            equ    38h    ; B=bit to set/clear, C=bit value
  492. FR$rd$chr$atr        equ    3Ch    ; in  D=row, E=col
  493.                     ; out H=row, L=col, B=char, C=attr(real)
  494. FR$wr$chr$atr        equ    40h    ; in  D=row, E=col, B=char, C=attr(real)
  495.                     ; out H=row, L=col
  496. FR$rd$color        equ    44h
  497. ;FR$wr$color        equ    48h
  498. ;            equ    4Ch
  499.  
  500.     page
  501. ;
  502. FR$trk$sect        equ    50h
  503. FR$check$CBM        equ    52h
  504. FR$bell            equ    54h
  505. ;            equ    56h
  506. ;            equ    58h
  507. ;            equ    5Ah
  508. ;            equ    5Ch
  509. ;            equ    5Eh
  510.  
  511. FR$trk$40        equ    60h
  512. FR$set$cur$40        equ    62h
  513. FR$line$paint        equ    64h
  514. FR$screen$paint        equ    66h
  515. FR$prt$msg$both        equ    68h
  516. FR$prt$de$both        equ    6Ah
  517. FR$update$it        equ    6Ch
  518. ;            equ    6Eh
  519.  
  520. FR$ASCII$to$pet        equ    70h
  521. FR$cur$adr$40        equ    72h
  522. FR$cur$adr$80        equ    74h
  523. FR$look$color        equ    76h
  524. ;            equ    78h
  525. FR$blk$fill        equ    7Ah    ; HL passed on the stack
  526. FR$blk$move        equ    7Ch    ; "
  527. FR$char$inst        equ    7Eh    ; "
  528.  
  529. ;
  530. ;    fixed ROM locations
  531. ;
  532. R$cmp$hl$de        equ    100h-6
  533. R$write$memory        equ    180h+0
  534. R$read$memory        equ    180h+3
  535. R$set$update$adr    equ    180h+6
  536. R$wait            equ    180h+9
  537.  
  538. R$status$color$tbl    equ    1000h-246-16
  539. R$color$convert$tbl    equ    1000h-230-16
  540.  
  541.     page
  542. ;
  543. ;    Disk type byte definition
  544. ;
  545. ;    bit    7    0=GCR,  1=MFM
  546. ;
  547. ;        if bit 7 is 1 (MFM)
  548. ;        6    C0=0,    C1=1    (side 2 #, 0 to (n/2)-1 or n/2 to n-1)
  549. ;        5,4    00=128, 01=256, 10=512, 11=1024  byte/sector
  550. ;        3,2,1    disk type (MFM)
  551. ;        0    starting sector # ( 0 or 1)
  552. ;
  553. ;        if bit 7 is 0 (GCR)
  554. ;        6    unused (set to 0)
  555. ;        5,4    always 01  (256 byte sectors)
  556. ;        3,2,1    disk type (GCR)
  557. ;            Type0 = none,  set track and sector as passed
  558. ;            Type1 = C64  type disk
  559. ;            Type2 = C128 type disk
  560. ;        0    unused (set to 0)
  561.  
  562. MFM    equ    1*128
  563. C0    equ    0*64        ; 2nd side start at begining
  564. C1    equ    1*64        ; 2nd side continues from first
  565. C1$bit    equ    6
  566.  
  567. Type0    equ    0*2        ; (MFM)    top, bottom then next track
  568.                 ;     (TRK# 0 to (34 or 39))
  569. Type1    equ    1*2        ; (MFM)    top (trk 0 even), bottom (trk 1 odd)
  570.                 ;     (TRK# 0 to (69 or 79))
  571. Type2    equ    2*2        ; (MFM)    top TRK# 0 to 39, bottom TRK# 40 to 79 
  572.                 ;     (TRK# on back start at 39 and go to 0)
  573. Type7    equ    7*2        ; (MFM) pass the byte values supplied in @trk
  574.                 ;    and @sect
  575.  
  576. TypeX    equ    7*2
  577.  
  578. S0    equ    0*1        ; start at sector 0
  579. S1    equ    1*1        ; start at sector 1
  580.  
  581. S128    equ    0*16
  582. S256    equ    1*16
  583. S512    equ    2*16
  584. S1024    equ    3*16
  585.  
  586. ;
  587. dsk$none    equ    Type0+S256    ; access to any sector on the disk
  588. dsk$c64        equ    Type1+S256
  589. dsk$c128    equ    Type2+S256
  590.  
  591. dir$track    equ    18        ; C64 disk dir track
  592.  
  593.     page
  594. ;
  595. ;    6510 commands
  596. ;
  597. vic$reset    equ    -1    ; reboot C128
  598. vic$init    equ    0    ; initilize the bios8502
  599. vic$rd        equ    1    ; read one sector of data (256 bytes) 
  600. vic$wr        equ    2    ; write one sector of data
  601. vic$rdF        equ    3    ; set-up for fast read (many sectors)
  602. vic$wrF        equ    4    ; set-up for fast write
  603. vic$test    equ    5    ; test current disk in drive
  604. vic$query    equ    6    ; get start sectors and #sector/trk
  605. vic$prt        equ    7    ; print data character
  606. vic$frmt    equ    8    ; format a disk (1541)
  607. vic$user$fun    equ    9
  608. vic$RM$rd    equ    10    ; RAM disk read
  609. vic$RM$wr    equ    11    ; RAM disk write
  610.  
  611. ;
  612. ;    control charactors
  613. ;
  614. eom        equ    00h
  615. bell        equ    07h
  616. bs        equ    08h
  617. lf        equ    0ah
  618. cr        equ    0dh
  619. xon        equ    11h
  620. xoff        equ    13h
  621. esc        equ    1bh
  622.  
  623. harac