40COL.S 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. .6502
  2. .include "MARIA.S"
  3. .title "Sample Atari 7800 "
  4. .subttl "zero page declarations"
  5. ROM = $f000 ; start of ROM cart
  6. .org $40
  7. INDPT1: .ds.w 1
  8. INDPT2: .ds.w 1
  9. INDPT3: .ds.w 1
  10. v1fBB: .ds.b 1 ;save .a in outchar
  11. v1fBC: .ds.b 1 ;save .x in outchar
  12. v1fBD: .ds.b 1 ;save .y in outchar
  13. v1fBE: .ds.b 1 ;loop counter in outchar
  14. v1fC0: .ds.b 1 ;temp var used in subrk
  15. count: .ds.b 1
  16. sdppl: .ds.b 1 ;shadow of display list list
  17. sdpph: .ds.b 1
  18. .subttl "ram subroutines and display list data"
  19. .org RAM3
  20. dllist: ds.b 96
  21. filler: ds.b 6
  22. line1: ds.b 12
  23. line2: ds.b 12
  24. line3: ds.b 12
  25. line4: ds.b 12
  26. line5: ds.b 12
  27. line6: ds.b 12
  28. line7: ds.b 12
  29. line8: ds.b 12
  30. line9: ds.b 12
  31. line10: ds.b 12
  32. line11: ds.b 12
  33. line12: ds.b 12
  34. line13: ds.b 12
  35. line14: ds.b 12
  36. line15: ds.b 12
  37. line16: ds.b 12
  38. line17: ds.b 12
  39. line18: ds.b 12
  40. line19: ds.b 12
  41. line20: ds.b 12
  42. line21: ds.b 12
  43. line22: ds.b 12
  44. line23: ds.b 12
  45. line24: ds.b 12
  46. .subttl "video matrix ram"
  47. .org $2400
  48. columns = 40 ;number of characters per line
  49. SCREEN:
  50. row1: ds.b columns
  51. row2: ds.b columns
  52. row3: ds.b columns
  53. row4: ds.b columns
  54. row5: ds.b columns
  55. row6: ds.b columns
  56. row7: ds.b columns
  57. row8: ds.b columns
  58. row9: ds.b columns
  59. row10: ds.b columns
  60. row11: ds.b columns
  61. row12: ds.b columns
  62. row13: ds.b columns
  63. row14: ds.b columns
  64. row15: ds.b columns
  65. row16: ds.b columns
  66. row17: ds.b columns
  67. row18: ds.b columns
  68. row19: ds.b columns
  69. row20: ds.b columns
  70. row21: ds.b columns
  71. row22: ds.b columns
  72. row23: ds.b columns
  73. row24: ds.b columns
  74. .subttl "begin ROM -- RAM routines"
  75. .org ROM
  76. ; here begins the display list list
  77. display 0,0,0,7,filler
  78. display 0,0,0,7,filler
  79. display 0,0,0,7,filler
  80. display 0,0,0,0,filler
  81. display 0,0,0,7,line1
  82. display 0,0,0,7,line2
  83. display 0,0,0,7,line3
  84. display 0,0,0,7,line4
  85. display 0,0,0,7,line5
  86. display 0,0,0,7,line6
  87. display 0,0,0,7,line7
  88. display 0,0,0,7,line8
  89. display 0,0,0,7,line9
  90. display 0,0,0,7,line10
  91. display 0,0,0,7,line11
  92. display 0,0,0,7,line12
  93. display 0,0,0,7,line13
  94. display 0,0,0,7,line14
  95. display 0,0,0,7,line15
  96. display 0,0,0,7,line16
  97. display 0,0,0,7,line17
  98. display 0,0,0,7,line18
  99. display 0,0,0,7,line19
  100. display 0,0,0,7,line20
  101. display 0,0,0,7,line21
  102. display 0,0,0,7,line22
  103. display 0,0,0,7,line23
  104. display 0,0,0,7,line24
  105. display 0,0,0,7,filler
  106. display 0,0,0,7,filler
  107. display 0,0,0,7,filler
  108. display 0,0,0,1,filler
  109. .subttl "display lists"
  110. ;here are the display lists referenced in the display list list
  111. ;filler
  112. header RAM1,0,0,0 ;address,palette,width,hpos
  113. nullhdr
  114. ;line1
  115. xheader row1,0,20,0,0,1 ;address,palette,width,hpos,wm,ind
  116. xheader row1+(columns/2),0,20,80,0,1
  117. nullhdr
  118. ;line2
  119. xheader row2,0,20,0,0,1
  120. xheader row2+(columns/2),0,20,80,0,1
  121. nullhdr
  122. ;line3
  123. xheader row3,0,20,0,0,1
  124. xheader row3+(columns/2),0,20,80,0,1
  125. nullhdr
  126. ;line4
  127. xheader row4,0,20,0,0,1
  128. xheader row4+(columns/2),0,20,80,0,1
  129. nullhdr
  130. ;line5
  131. xheader row5,0,20,0,0,1
  132. xheader row5+(columns/2),0,20,80,0,1
  133. nullhdr
  134. ;line6
  135. xheader row6,0,20,0,0,1
  136. xheader row6+(columns/2),0,20,80,0,1
  137. nullhdr
  138. ;line7
  139. xheader row7,0,20,0,0,1
  140. xheader row7+(columns/2),0,20,80,0,1
  141. nullhdr
  142. ;line8
  143. xheader row8,0,20,0,0,1
  144. xheader row8+(columns/2),0,20,80,0,1
  145. nullhdr
  146. ;line9
  147. xheader row9,0,20,0,0,1
  148. xheader row9+(columns/2),0,20,80,0,1
  149. nullhdr
  150. ;line10
  151. xheader row10,0,20,0,0,1
  152. xheader row10+(columns/2),0,20,80,0,1
  153. nullhdr
  154. ;line11
  155. xheader row11,0,20,0,0,1
  156. xheader row11+(columns/2),0,20,80,0,1
  157. nullhdr
  158. ;line12
  159. xheader row12,0,20,0,0,1
  160. xheader row12+(columns/2),0,20,80,0,1
  161. nullhdr
  162. ;line13
  163. xheader row13,0,20,0,0,1
  164. xheader row13+(columns/2),0,20,80,0,1
  165. nullhdr
  166. ;line14
  167. xheader row14,0,20,0,0,1
  168. xheader row14+(columns/2),0,20,80,0,1
  169. nullhdr
  170. ;line15
  171. xheader row15,0,20,0,0,1
  172. xheader row15+(columns/2),0,20,80,0,1
  173. nullhdr
  174. ;line16
  175. xheader row16,0,20,0,0,1
  176. xheader row16+(columns/2),0,20,80,0,1
  177. nullhdr
  178. ;line17
  179. xheader row17,0,20,0,0,1
  180. xheader row17+(columns/2),0,20,80,0,1
  181. nullhdr
  182. ;line18
  183. xheader row18,0,20,0,0,1
  184. xheader row18+(columns/2),0,20,80,0,1
  185. nullhdr
  186. ;line19
  187. xheader row19,0,20,0,0,1
  188. xheader row19+(columns/2),0,20,80,0,1
  189. nullhdr
  190. ;line20
  191. xheader row20,0,20,0,0,1
  192. xheader row20+(columns/2),0,20,80,0,1
  193. nullhdr
  194. ;line21
  195. xheader row21,0,20,0,0,1
  196. xheader row21+(columns/2),0,20,80,0,1
  197. nullhdr
  198. ;line22
  199. xheader row22,0,20,0,0,1
  200. xheader row22+(columns/2),0,20,80,0,1
  201. nullhdr
  202. ;line23
  203. xheader row23,0,20,0,0,1
  204. xheader row23+(columns/2),0,20,80,0,1
  205. nullhdr
  206. ;line24
  207. xheader row24,0,20,0,0,1
  208. xheader row24+(columns/2),0,20,80,0,1
  209. nullhdr
  210. .subttl "Character generation data"
  211. ;The data here is represented so that every 128 bytes sequentially is the next
  212. ;row of the 8 x 8 character represented. As an example, the first row of a
  213. ;capital A is located at table + $41, the second at table + $41 + $80, etc.
  214. table:
  215. dc.b $00,$7E,$7E,$6C,$10,$38,$10,$00
  216. dc.b $FF,$00,$FF,$0F,$3C,$3F,$7F,$99
  217. dc.b $80,$02,$18,$66,$7F,$3E,$00,$18
  218. dc.b $18,$18,$00,$00,$00,$00,$00,$00
  219. dc.b $00,$30,$6C,$6C,$30,$00,$38,$60
  220. dc.b $18,$60,$00,$00,$00,$00,$00,$06
  221. dc.b $7C,$30,$78,$78,$1C,$FC,$38,$FC
  222. dc.b $78,$78,$00,$00,$18,$00,$60,$78
  223. dc.b $7C,$30,$FC,$3C,$F8,$FE,$FE,$3C
  224. dc.b $CC,$78,$1E,$E6,$F0,$C6,$C6,$38
  225. dc.b $FC,$78,$FC,$78,$FC,$CC,$CC,$C6
  226. dc.b $C6,$CC,$FE,$78,$C0,$78,$10,$00
  227. dc.b $30,$00,$E0,$00,$1C,$00,$38,$00
  228. dc.b $E0,$30,$0C,$E0,$70,$00,$00,$00
  229. dc.b $00,$00,$00,$00,$10,$00,$00,$00
  230. dc.b $00,$00,$00,$1C,$18,$E0,$76,$00
  231. dc.b $00,$81,$FF,$FE,$38,$7C,$10,$00
  232. dc.b $FF,$3C,$C3,$07,$66,$33,$63,$5A
  233. dc.b $E0,$0E,$3C,$66,$DB,$63,$00,$3C
  234. dc.b $3C,$18,$18,$30,$00,$24,$18,$FF
  235. dc.b $00,$78,$6C,$6C,$7C,$C6,$6C,$60
  236. dc.b $30,$30,$66,$30,$00,$00,$00,$0C
  237. dc.b $C6,$70,$CC,$CC,$3C,$C0,$60,$CC
  238. dc.b $CC,$CC,$30,$30,$30,$00,$30,$CC
  239. dc.b $C6,$78,$66,$66,$6C,$62,$62,$66
  240. dc.b $CC,$30,$0C,$66,$60,$EE,$E6,$6C
  241. dc.b $66,$CC,$66,$CC,$B4,$CC,$CC,$C6
  242. dc.b $C6,$CC,$C6,$60,$60,$18,$38,$00
  243. dc.b $30,$00,$60,$00,$0C,$00,$6C,$00
  244. dc.b $60,$00,$00,$60,$30,$00,$00,$00
  245. dc.b $00,$00,$00,$00,$30,$00,$00,$00
  246. dc.b $00,$00,$00,$30,$18,$30,$DC,$10
  247. dc.b $00,$A5,$DB,$FE,$7C,$38,$38,$18
  248. dc.b $E7,$66,$99,$0F,$66,$3F,$7F,$3C
  249. dc.b $F8,$3E,$7E,$66,$DB,$38,$00,$7E
  250. dc.b $7E,$18,$0C,$60,$C0,$66,$3C,$FF
  251. dc.b $00,$78,$6C,$FE,$C0,$CC,$38,$C0
  252. dc.b $60,$18,$3C,$30,$00,$00,$00,$18
  253. dc.b $CE,$30,$0C,$0C,$6C,$F8,$C0,$0C
  254. dc.b $CC,$CC,$30,$30,$60,$FC,$18,$0C
  255. dc.b $DE,$CC,$66,$C0,$66,$68,$68,$C0
  256. dc.b $CC,$30,$0C,$6C,$60,$FE,$F6,$C6
  257. dc.b $66,$CC,$66,$E0,$30,$CC,$CC,$C6
  258. dc.b $6C,$CC,$8C,$60,$30,$18,$6C,$00
  259. dc.b $18,$78,$60,$78,$0C,$78,$60,$76
  260. dc.b $6C,$70,$0C,$66,$30,$CC,$F8,$78
  261. dc.b $DC,$76,$DC,$7C,$7C,$CC,$CC,$C6
  262. dc.b $C6,$CC,$FC,$30,$18,$30,$00,$38
  263. dc.b $00,$81,$FF,$FE,$FE,$FE,$7C,$3C
  264. dc.b $C3,$42,$BD,$7D,$66,$30,$63,$E7
  265. dc.b $FE,$FE,$18,$66,$7B,$6C,$00,$18
  266. dc.b $18,$18,$FE,$FE,$C0,$FF,$7E,$7E
  267. dc.b $00,$30,$00,$6C,$78,$18,$76,$00
  268. dc.b $60,$18,$FF,$FC,$00,$FC,$00,$30
  269. dc.b $DE,$30,$38,$38,$CC,$0C,$F8,$18
  270. dc.b $78,$7C,$00,$00,$C0,$00,$0C,$18
  271. dc.b $DE,$CC,$7C,$C0,$66,$78,$78,$C0
  272. dc.b $FC,$30,$0C,$78,$60,$FE,$DE,$C6
  273. dc.b $7C,$CC,$7C,$70,$30,$CC,$CC,$D6
  274. dc.b $38,$78,$18,$60,$18,$18,$C6,$00
  275. dc.b $00,$0C,$7C,$CC,$7C,$CC,$F0,$CC
  276. dc.b $76,$30,$0C,$6C,$30,$FE,$CC,$CC
  277. dc.b $66,$CC,$76,$C0,$30,$CC,$CC,$D6
  278. dc.b $5C,$CC,$98,$E0,$00,$1C,$00,$6C
  279. dc.b $00,$BD,$C3,$7C,$7C,$FE,$FE,$3C
  280. dc.b $C3,$42,$BD,$CC,$3C,$30,$63,$E7
  281. dc.b $F8,$3E,$18,$66,$1B,$6C,$7E,$7E
  282. dc.b $18,$7E,$0C,$60,$C0,$66,$FF,$3C
  283. dc.b $00,$30,$00,$FE,$0C,$30,$DC,$00
  284. dc.b $60,$18,$3C,$30,$00,$00,$00,$60
  285. dc.b $F6,$30,$60,$0C,$FE,$0C,$CC,$30
  286. dc.b $CC,$0C,$00,$00,$60,$00,$18,$30
  287. dc.b $DE,$FC,$66,$C0,$66,$68,$68,$CE
  288. dc.b $CC,$30,$CC,$6C,$62,$D6,$CE,$C6
  289. dc.b $60,$DC,$6C,$1C,$30,$CC,$CC,$FE
  290. dc.b $38,$30,$32,$60,$0C,$18,$00,$00
  291. dc.b $00,$7C,$66,$C0,$CC,$FC,$60,$CC
  292. dc.b $66,$30,$0C,$78,$30,$FE,$CC,$CC
  293. dc.b $66,$CC,$66,$78,$30,$CC,$CC,$FE
  294. dc.b $38,$CC,$30,$30,$18,$30,$00,$C6
  295. dc.b $00,$99,$E7,$38,$38,$7C,$7C,$18
  296. dc.b $E7,$66,$99,$CC,$18,$70,$67,$3C
  297. dc.b $E0,$0E,$7E,$00,$1B,$38,$7E,$3C
  298. dc.b $18,$3C,$18,$30,$FE,$24,$FF,$18
  299. dc.b $00,$00,$00,$6C,$F8,$66,$CC,$00
  300. dc.b $30,$30,$66,$30,$30,$00,$30,$C0
  301. dc.b $E6,$30,$CC,$CC,$0C,$CC,$CC,$30
  302. dc.b $CC,$18,$30,$30,$30,$FC,$30,$00
  303. dc.b $C0,$CC,$66,$66,$6C,$62,$60,$66
  304. dc.b $CC,$30,$CC,$66,$66,$C6,$C6,$6C
  305. dc.b $60,$78,$66,$CC,$30,$CC,$78,$EE
  306. dc.b $6C,$30,$66,$60,$06,$18,$00,$00
  307. dc.b $00,$CC,$66,$CC,$CC,$C0,$60,$7C
  308. dc.b $66,$30,$CC,$6C,$30,$D6,$CC,$CC
  309. dc.b $7C,$7C,$60,$0C,$34,$CC,$78,$FE
  310. dc.b $6C,$7C,$64,$30,$18,$30,$00,$C6
  311. dc.b $00,$81,$FF,$10,$10,$38,$38,$00
  312. dc.b $FF,$3C,$C3,$CC,$7E,$F0,$E6,$5A
  313. dc.b $80,$02,$3C,$66,$1B,$CC,$7E,$18
  314. dc.b $18,$18,$00,$00,$00,$00,$00,$00
  315. dc.b $00,$30,$00,$6C,$30,$C6,$76,$00
  316. dc.b $18,$60,$00,$00,$30,$00,$30,$80
  317. dc.b $7C,$FC,$FC,$78,$1E,$78,$78,$30
  318. dc.b $78,$70,$30,$30,$18,$00,$60,$30
  319. dc.b $78,$CC,$FC,$3C,$F8,$FE,$F0,$3E
  320. dc.b $CC,$78,$78,$E6,$FE,$C6,$C6,$38
  321. dc.b $F0,$1C,$E6,$78,$78,$FC,$30,$C6
  322. dc.b $C6,$78,$FE,$78,$02,$78,$00,$00
  323. dc.b $00,$76,$DC,$78,$76,$78,$F0,$0C
  324. dc.b $E6,$78,$CC,$E6,$78,$C6,$CC,$78
  325. dc.b $60,$0C,$F0,$F8,$18,$76,$30,$6C
  326. dc.b $C6,$0C,$FC,$1C,$18,$E0,$00,$FE
  327. dc.b $00,$7E,$7E,$00,$00,$7C,$7C,$00
  328. dc.b $FF,$00,$FF,$78,$18,$E0,$C0,$99
  329. dc.b $00,$00,$18,$00,$00,$78,$00,$FF
  330. dc.b $00,$00,$00,$00,$00,$00,$00,$00
  331. dc.b $00,$00,$00,$00,$00,$00,$00,$00
  332. dc.b $00,$00,$00,$00,$60,$00,$00,$00
  333. dc.b $00,$00,$00,$00,$00,$00,$00,$00
  334. dc.b $00,$00,$00,$00,$00,$00,$00,$00
  335. dc.b $00,$00,$00,$00,$00,$00,$00,$00
  336. dc.b $00,$00,$00,$00,$00,$00,$00,$00
  337. dc.b $00,$00,$00,$00,$00,$00,$00,$00
  338. dc.b $00,$00,$00,$00,$00,$00,$00,$FF
  339. dc.b $00,$00,$00,$00,$00,$00,$00,$F8
  340. dc.b $00,$00,$78,$00,$00,$00,$00,$00
  341. dc.b $F0,$1E,$00,$00,$00,$00,$00,$00
  342. dc.b $00,$F8,$00,$00,$00,$00,$00,$00
  343. .subttl "main program"
  344. ; place for IRQ and NMI to attach
  345. dummy:
  346. rti
  347. main:
  348. sei
  349. cld
  350. ldx #$FF ;init stack
  351. txs
  352. lda #$7
  353. ; sta PTCTRL
  354. lda #$7f
  355. sta CTRL
  356. inx
  357. loop:
  358. ;move display list list to RAM
  359. lda ROM,x
  360. sta RAM3,x
  361. lda ROM+$100,x
  362. sta RAM3+$100,x
  363. ;move character rom data
  364. ;Maria fetches character data every 256 locations so the character
  365. ;ROM data is thus spread out from the packed ROM representation
  366. lda table,x
  367. sta RAM1+$700,x
  368. lda table+$80,x
  369. sta RAM1+$600,x
  370. lda table+$100,x
  371. sta RAM1+$500,x
  372. lda table+$180,x
  373. sta RAM1+$400,x
  374. lda table+$200,x
  375. sta RAM1+$300,x
  376. lda table+$280,x
  377. sta RAM1+$200,x
  378. lda table+$300,x
  379. sta RAM1+$100,x
  380. lda table+$380,x
  381. sta RAM1,x
  382. inx
  383. bne loop
  384. main30:
  385. bit MSTAT ;Vblank?
  386. bmi main30 ;wait while it is on...
  387. main32:
  388. bit MSTAT ;Vblank?
  389. bpl main32 ;wait until it comes back...
  390. lda #RAM1 >> 8
  391. sta CHBASE ;character base address.
  392. dppload dllist ;init display list list.
  393. screen 1,2,0,1,0,3 ;Maria setups:
  394. ;0=normal color.
  395. ;2=Normal DMA.
  396. ;0=single byte wide characters.
  397. ;1=background colored border.
  398. ;0=transparency mode.
  399. ;3=320 a or c mode.
  400. around:
  401. lda #$0
  402. sta BKGRND ;maria background color register
  403. lda #$0e
  404. sta P0C2 ;maria pallette 0 - color 2
  405. jsr clear ;clear screen
  406. main40:
  407. lda #0
  408. sta v1fC0
  409. main50:
  410. lda v1fC0
  411. cmp #$0d
  412. beq main60
  413. jsr outchar
  414. main60: inc v1fC0
  415. cmp #$7f
  416. bne main50
  417. beq main40
  418. outchar:
  419. sta v1fBB ;save all registers
  420. stx v1fBC
  421. sty v1fBD
  422. outc10:
  423. lda SWCHB ;read console switches
  424. and #PAUSE ;PAUSE down?
  425. beq outc10 ;yes ... wait until released
  426. lda v1fBB ;restore character to print
  427. and #$7F ;strip off high bit
  428. cmp #$0D ;see if a carriage return
  429. bne outc2 ;no ...
  430. ldx #0 ;search for start of next line
  431. outc11:
  432. sec
  433. lda lines,x
  434. sbc INDPT2
  435. lda lines+1,x
  436. sbc INDPT2+1
  437. bcs outc15 ;found a line start >=
  438. inx
  439. inx
  440. cpx #46 ;end of table?
  441. bcc outc11 ;keep looking...
  442. outc15:
  443. lda lines,x ;start of next line
  444. sta INDPT2
  445. lda lines+1,x
  446. sta INDPT2+1
  447. jmp doneoutc ;done ...
  448. outc2:
  449. sec
  450. lda INDPT2
  451. sbc #(row24+columns) & $ff ;beyond end of screen?
  452. lda INDPT2+1
  453. sbc #(row24+columns) >> 8
  454. bcs outc3 ;yes ...
  455. jmp outc6b ;no ... o.k. to print
  456. outc3:
  457. lda #$03 ;outer loop counter (3 pages)
  458. sta v1fBE
  459. lda #SCREEN & $ff ;init pointers to begin of screen
  460. sta INDPT2
  461. lda #SCREEN >> 8
  462. sta INDPT2+1
  463. outc3a:
  464. ldx #$00
  465. outc3b:
  466. ldy #columns ;get one line ahead
  467. lda (INDPT2),y
  468. ldy #$00
  469. sta (INDPT2),y ;store it where we are
  470. inc INDPT2 ;advance pointer to next position
  471. bne outc4
  472. inc INDPT2+1
  473. outc4:
  474. inx
  475. bne outc3b
  476. dec v1fBE
  477. bpl outc3a
  478. lda #row24 & $ff
  479. sta INDPT2
  480. lda #row24 >> 8
  481. sta INDPT2+1
  482. ldx #columns-1 ;clear the last line
  483. lda #$00
  484. outc6:
  485. sta row24+columns,x
  486. sta row24,x
  487. dex
  488. bpl outc6
  489. outc6b:
  490. ldy #$00
  491. lda v1fBB ;get back saved character
  492. and #$7F ;mask off high bit
  493. cmp #$0D ;carriage return?
  494. beq doneoutc ;yes ...
  495. sta (INDPT2),y ;put character in video matrix
  496. inc INDPT2 ;increment lo of char pointer
  497. bne doneoutc ;no carry ...
  498. inc INDPT2+1 ;increment hi of char pointer
  499. doneoutc:
  500. lda v1fBB ;restore registers
  501. ldx v1fBC
  502. ldy v1fBD
  503. rts
  504. outstring:
  505. stx INDPT3
  506. sty INDPT3+1
  507. ldy #$00
  508. outs10:
  509. lda (INDPT3),y
  510. beq outs20
  511. jsr outchar
  512. inc INDPT3
  513. bne outs10
  514. inc INDPT3+1
  515. jmp outs10
  516. outs20:
  517. rts
  518. lines:
  519. .dc.w row2
  520. .dc.w row3
  521. .dc.w row4
  522. .dc.w row5
  523. .dc.w row6
  524. .dc.w row7
  525. .dc.w row8
  526. .dc.w row9
  527. .dc.w row10
  528. .dc.w row11
  529. .dc.w row12
  530. .dc.w row13
  531. .dc.w row14
  532. .dc.w row15
  533. .dc.w row16
  534. .dc.w row17
  535. .dc.w row18
  536. .dc.w row19
  537. .dc.w row20
  538. .dc.w row21
  539. .dc.w row22
  540. .dc.w row23
  541. .dc.w row24
  542. .dc.w row1
  543. outbyte:
  544. pha
  545. lsr
  546. lsr
  547. lsr
  548. lsr
  549. jsr outdigit
  550. pla
  551. outdigit:
  552. and #$0F
  553. clc
  554. adc #$30
  555. cmp #$3A
  556. bcc subrf1
  557. clc
  558. adc #$07
  559. subrf1:
  560. jmp outchar
  561. ; subroutine to clear the video display character matrix
  562. clear:
  563. lda #$00
  564. tax
  565. clr010:
  566. sta SCREEN,x ;zero display by pages
  567. sta SCREEN+$100,x
  568. sta SCREEN+$200,x
  569. sta row24+columns-$100,x
  570. inx
  571. bne clr010
  572. lda #$ff & SCREEN ;home the cursor position
  573. sta INDPT2
  574. lda #SCREEN >> 8
  575. sta INDPT2+1
  576. rts
  577. .org $FFF8
  578. .dc.w $F7FF
  579. .dc.w dummy ;NMI
  580. .dc.w main ;RESET
  581. .dc.w dummy ;IRQ