home *** CD-ROM | disk | FTP | other *** search
/ Outlet 81 / outlet-81.mgt / TOR-AS4SO < prev    next >
Text File  |  2021-04-18  |  15KB  |  1,333 lines

  1. ;   * TORNADO *
  2.  
  3. ; TORNADO ASSEMBLER source     -- 106
  4.  
  5. TEMPASP áFINDADD ;re-used
  6. inclflag áxpos +28 
  7. noroomflg áxpos +29 
  8. ;                  includs    EQU  25651
  9.  
  10.  
  11. ;          ORG  29978             ;=ASSEMBLE
  12.  
  13. assemble2 èpra ;print flash 'A'
  14. ┤Ñ,SYMBTOP ;reset symbtable
  15. ┤(SYMPO),Ñ
  16. ΣÇ
  17. ┤(ERRCNT),Ç;reset more
  18. ⌐Ç
  19. ┤(PASS),Ç;1 = pass 1
  20. A1 ┤Ñ,0 
  21. ┤(ASSPOINT),Ñ;defaults
  22. ┤(DUMPA),Ñ
  23. ┤(DUMPF),Ñ
  24. ┤(inclflag),Ñ;NO include, NO no-room
  25. ┤ö,FILSTRT 
  26. èdoass ;assemble !
  27. ┤Ç,(noroomflg)
  28. àÇ;test for 'noroom'
  29. ▓╛,noroom ;exit if so
  30. ┤Ñ,PASS ;test for pass 2
  31. ò(Ñ)
  32. ▒╛,ASSEXIT ;exit to menu if so
  33. ┤(Ñ),3 ;signal pass 2
  34. ▓A1 
  35.  
  36. noroom èprmenu 
  37. ┤ç,merm ;no room exit
  38. ▒printerr ;cont. in MENU-wait
  39.  
  40. pra ┤Ñ,POSM ;AT x,y
  41. èprintmsge 
  42. ┤Ñ,AMS ;flash A
  43. èprintmsge 
  44.  
  45. doass ┤(storevar),▀;store point of entry
  46. A3 ┤Ñ,(ASSPOINT);start of opcode now
  47. ┤(TEMPASP),Ñ
  48. A4 èSKIP +1 ;get char, test chr$ 13
  49. ▓σ,A6 
  50. î":" 
  51. ▓σ,A6 ;next stmt
  52. î";" 
  53. ▓σ,A5 ;comment
  54. î126 
  55. ▓σ,A5 ;block marker
  56. î127 ;(c)
  57. ▓╛,A7 ;jp if 'valid' char
  58. A5 ⌐ö;step over rest of line
  59. ┤Ç,(ö)
  60. î13 
  61. ▓╛,A5 
  62. A6 ⌐ö;test after chr$ 13
  63. ┤Ç,(ö)
  64. î255 ;for end of file
  65. ═σ;ret if so, no flag
  66. ┤Ç,(inclflag);including?
  67. àÇ
  68. ▓σ,a3 ;cont if not including
  69. ┤Ç,Æ;test scrbufpointer
  70. î79 ;256 less then 16384 + 2048
  71. ▓ë,a3 ;jp if still inside
  72. ┤Ç,3 ;signal : refill buffer
  73. ┤(noroomflg),Ç
  74.  
  75. A7 Γ128 ;test for token
  76. ▓║,A12 ;jp if so
  77. èSTORESYM ;try for label
  78. ▓║,A8 ;jp if new label
  79. ┤Ç,(PASS);test any existing label
  80. î2 ;on 2nd pass there must
  81. ▓║,A8 ;               be a value
  82. ê7,(»+0);'value known' flag
  83. ▒╛,ERR5 
  84. A8 èSKIP +1 ;after a label,
  85. Γ128 ; a token must follow
  86. ▒ë,ERR0 
  87. î32 ;+128 = EQU
  88. ▓╛,A10 ;jp if not
  89. èEVAL ;get number
  90. ▓ë,A4 ;jp if another label
  91. A9 ┤(»+14),│;assign val to label
  92. ┤(»+15),ú
  93. ▌7,(»+0);signal 'value known'
  94. ▓A4 ;loop
  95.  
  96. A10 î64 ;+128 = ORG
  97. ▓╛,A11 ;jp if not
  98. èEVAL ;get number
  99. ▒ë,ERR1 ;jp if value not found
  100. ┤(ASSPOINT),Ñ;else assign value
  101. ▓A9 
  102. A11 ┤Ñ,(ASSPOINT);if not EQU or ORG, then
  103. ┤(»+14),│;      assign current addr
  104. ┤(»+15),ú
  105. ▌7,(»+0); to label
  106. A12 ┤Ñ,A4 ;set RET-addr
  107. ʥ
  108. ┤ë,Ç;store tokennr
  109. ┤å,0 
  110. ┤Ñ,ATOKTAB 
  111. éÑ,ç;find entry
  112. éÑ,ç
  113. éÑ,ç
  114. ┤ë,(Ñ);get defb
  115. ⌐Ñ
  116. ┤Ç,(Ñ);get jp-addr in HL
  117. ⌐Ñ
  118. ┤ú,(Ñ)
  119. ┤│,Ç
  120. èESTM ;get next char, test end of
  121. ▒(Ñ);do it                    stmt
  122.  
  123. ATOKTAB û0 :ÖERR0 ;serviceroutines
  124. û136 :ÖABCS 
  125. û128 :ÖADDS
  126. û0 :ÖERR0
  127. û0 :ÖERR0
  128. û160 :ÖLOGS
  129. û0 :ÖERR0
  130. û0 :ÖERR0
  131. û64 :ÖBITS
  132. û0 :ÖERR0
  133. û196 :ÖCALLS
  134. û63 :ÖNOPS
  135. û184 :ÖLOGS
  136. û169 :ÖBLOCKS
  137. û185 :ÖBLOCKS
  138. û161 :ÖBLOCKS
  139. û177 :ÖBLOCKS
  140. û47 :ÖNOPS
  141. û0 :ÖERR0
  142. û39 :ÖNOPS
  143. û0 :ÖERR0
  144. û5 :ÖINCS
  145. û0 :ÖDEFBS
  146. û34 :ÖDEFMS
  147. û0 :ÖDEFSS
  148. û0 :ÖDEFWS
  149. û243 :ÖNOPS
  150. û16 :ÖDJNZS
  151. û0 :ÖDUMPS
  152. û0 :ÖERR0
  153. û251 :ÖNOPS
  154. û0 :ÖENDS
  155. û0 :ÖERR0
  156. û0 :ÖEXS
  157. û217 :ÖNOPS
  158. û0 :ÖERR0
  159. û118 :ÖNOPS
  160. û0 :ÖERR0
  161. û0 :ÖERR0
  162. û0 :ÖIMS
  163. û64 :ÖINS
  164. û4 :ÖINCS
  165. û34 :ÖINCLUDS 
  166. û170 :ÖBLOCKS
  167. û186 :ÖBLOCKS
  168. û162 :ÖBLOCKS
  169. û178 :ÖBLOCKS
  170. û0 :ÖERR0
  171. û0 :ÖERR0
  172. û194 :ÖJPS
  173. û32 :ÖJRS
  174. û0 :ÖERR0
  175. û64 :ÖLDS
  176. û168 :ÖBLOCKS
  177. û184 :ÖBLOCKS
  178. û160 :ÖBLOCKS
  179. û176 :ÖBLOCKS
  180. û0 :ÖERR0
  181. û0 :ÖERR0
  182. û68 :ÖBLOCKS
  183. û0 :ÖNOPS
  184. û0 :ÖERR0
  185. û0 :ÖERR0
  186. û176 :ÖLOGS
  187. û0 :ÖORGS
  188. û187 :ÖBLOCKS
  189. û179 :ÖBLOCKS
  190. û65 :ÖOUTS
  191. û171 :ÖBLOCKS
  192. û163 :ÖBLOCKS
  193. û0 :ÖERR0
  194. û0 :ÖERR0
  195. û0 :ÖERR0
  196. û193 :ÖPOPS
  197. û197 :ÖPOPS
  198. û0 :ÖERR0
  199. û128 :ÖBITS
  200. û192 :ÖRETS
  201. û77 :ÖBLOCKS
  202. û69 :ÖBLOCKS
  203. û16 :ÖROTAS
  204. û23 :ÖNOPS
  205. û0 :ÖROTAS
  206. û7 :ÖNOPS
  207. û111 :ÖBLOCKS
  208. û24 :ÖROTAS
  209. û31 :ÖNOPS
  210. û8 :ÖROTAS
  211. û15 :ÖNOPS
  212. û103 :ÖBLOCKS
  213. û199 :ÖRSTS
  214. û152 :ÖABCS 
  215. û55 :ÖNOPS
  216. û192 :ÖBITS
  217. û32 :ÖROTAS
  218. û0 :ÖERR0
  219. û40 :ÖROTAS
  220. û56 :ÖROTAS
  221. û144 :ÖLOGS
  222. û0 :ÖERR0
  223. û168 :ÖLOGS
  224. û0 :ÖERR0
  225.  
  226. ;insert byte into code
  227. NOMOPS ó;save all regs
  228. ┤å,Ç
  229. ┤Ç,(PASS);on second pass only
  230. î3 
  231. ▓╛,NOM2 
  232. ┤Ñ,(DUMPF);skip if DUMP = 0
  233. ┤Ç,ú
  234. ┐│
  235. ┤Ñ,(dumpa)
  236. ▓σ,NOM1 
  237. ┤Ç,(SYMPO +1);test addr against bottom of
  238. òÇ;                    symboltab
  239. îú
  240. ▒ë,ERROUTS ;no room error
  241. ┤(Ñ),å;store it now
  242. nom1 ⌐Ñ
  243. ┤(DUMPA),Ñ;adjust dumpaddr + assaddr
  244. NOM2 ┤Ñ,(ASSPOINT)
  245. ⌐Ñ
  246. ┤(ASSPOINT),Ñ
  247. ┤Ñ,#2758;restore HL' (SPEC-error)
  248. ó
  249.  
  250. COMMA èSKIP ;test separator
  251. î"," 
  252. ▒╛,ERR4 
  253.  
  254. SKIP ⌐ö;get next char
  255. ┤Ç,(ö)
  256. î32 
  257. ▓σ,SKIP 
  258. î13 ;set Zflag if eol
  259.  
  260. ESTM ⌐ö;test end of statement
  261. èSKIP +1 
  262. ═σ
  263. î";" 
  264. ═σ
  265. î":" 
  266.  
  267. EVA ⌐ö;eval numeric expr.
  268. EV1 ╩Ñ
  269. èE1 ;do it
  270. ΣÇ;result should be < 255
  271. ┐ú
  272. ▒╛,ERR2 
  273. ┤Ç,│;result in A
  274. ɥ
  275.  
  276. EVAL ⌐ö;eval 16-bit num. expr.
  277. E1 ΣÇ;signal val unknown
  278. ┤(HULP),Ç
  279. ʇ
  280. ╩»;points to label
  281. èGETNUM ;result in HL
  282. E2 èSKIP +1 ;next char
  283.  
  284. î45 ;sub
  285. ▓╛,E3 
  286. èGETNEXV ;next number, in HL
  287. ┤Ç,ë;do sub
  288. Γ│;BC = first number
  289. ┤│,Ç
  290. ┤Ç,å
  291. █Ç,ú
  292. ▓E12 
  293.  
  294. E3 î43 ;add
  295. ▓╛,E4 
  296. èGETNEXV 
  297. éÑ,ç
  298. ▓E2 
  299.  
  300. E4 î38 ;and  = &
  301. ▓╛,E5 
  302. èGETNEXV 
  303. ┤Ç,ë
  304. à│
  305. ┤│,Ç
  306. ┤Ç,å
  307. àú
  308. ▓E12 
  309.  
  310. E5 î33 ;or   = !
  311. ▓╛,E6 
  312. èGETNEXV 
  313. ┤Ç,ë
  314. ┐│
  315. ┤│,Ç
  316. ┤Ç,å
  317. ┐ú
  318. ▓E12 
  319.  
  320. E6 î42 ;mult
  321. ▓╛,E9 
  322. èGETNEXV 
  323. ʔ
  324. íö,Ñ
  325. ┤Ç,å
  326. ┤å,16 
  327. ┤Ñ,0 
  328. E7 éÑ,Ñ
  329. Љ
  330. ▓║,E8 
  331. éÑ,ö
  332. E8 ¢E7 
  333. ɔ
  334. ▓E2 
  335.  
  336. E9 î47 ;div
  337. ▓╛,E13 
  338. èGETNEXV 
  339. ʔ
  340. íö,Ñ
  341. ┤Ç,å
  342. ┤å,16 
  343. ┤Ñ,0 
  344. E10 ╨ë
  345. üÑ,Ñ
  346. █Ñ,ö
  347. ▓║,E11 
  348. éÑ,ö
  349. E11 ï
  350. ¢E10 
  351. Љ
  352. ɔ
  353. ┤│,ë;result in HL
  354. E12 ┤ú,Ç
  355. ▓E2 ;test for more calc ops.
  356.  
  357. E13 ╔»;exit here
  358. ɇ
  359. ┤Ç,(HULP);test 'value known'
  360. éÇ,Ç
  361. ═║;jp if so, no label used
  362.  
  363. ┤Ç,(PASS);test second pass
  364. ê1,Ç
  365. ┤Ñ,0 ;keep CARRY
  366. ═σ;ret with valid label
  367. ▒ERR1 ;2nd pass, no value
  368.  
  369. GETNEXV ╩Ñ;get next num. val from file
  370. ⌐ö
  371. èGETNUM ;old val in BC
  372. ╔ç;new val in HL
  373.  
  374. GETNUM ┤Ñ,0 ;get a number from file
  375. èSKIP +1 
  376. èTESTN ;numeric?
  377. ▓║,DECI ;jp if not
  378. î"#" 
  379. ▓σ,HEXA 
  380. î"%" 
  381. ▓σ,BINAIR 
  382. î34 
  383. ▓σ,ASCI 
  384. î"$" ;current addr
  385. ▓╛,GN1 
  386. ┤Ñ,(TEMPASP)
  387. ⌐ö
  388. ═;with current memaddr in HL
  389. GN1 àÇ;test token
  390. ▒╣,ERR0 ;jp if so
  391. èAONLY ;A - z
  392. ▒ë,ERR3 ;jp if not
  393. èST0 ;evaluate label
  394. ┐Ç
  395. ┤│,(»+14);fetch val from label
  396. ┤ú,(»+15)
  397. ê7,(»+0 );test valid label
  398. ═╛
  399. ┤Ç,255 ;signal known/unknown
  400. ┤(HULP),Ç
  401.  
  402. ASCI ⌐ö;get ascii value
  403. ┤Ç,(ö)
  404. î13 
  405. ▓σ,ASCER ;error if end of line
  406. ┤│,Ç
  407. ⌐ö;L = 1th
  408. ┤Ç,(ö);A = 2nd
  409. ⌐ö
  410. î34 
  411. ═σ
  412. ▒ERR4 
  413.  
  414. DECI Γ48 ;do numeric
  415. ┤│,Ç
  416. DC2 ⌐ö
  417. ┤Ç,(ö)
  418. èTESTN 
  419. ͉
  420. Γ48 
  421. ┤å,ú
  422. ┤ë,│
  423. éÑ,Ñ
  424. ▓ë,ASCER ;error
  425. éÑ,Ñ
  426. ▓ë,ASCER ;error
  427. éÑ,ç
  428. ▓ë,ASCER ;error
  429. éÑ,Ñ
  430. ▓ë,ASCER ;error
  431. éÇ,│
  432. ┤│,Ç
  433. ▓║,DC2 
  434. ⌐ú
  435. ▓╛,DC2 
  436. ASCER ▒ERR3 ;overflow, >65535
  437.  
  438. HEXA ⌐ö
  439. ┤Ç,(ö)
  440. èTHEX 
  441. ▓ë,ASCER ;error
  442. ┤│,Ç
  443. HX ⌐ö
  444. ┤Ç,(ö)
  445. èTHEX 
  446. ͉
  447. éÑ,Ñ
  448. ▓ë,ASCER ;err
  449. éÑ,Ñ
  450. ▓ë,ASCER ;err
  451. éÑ,Ñ
  452. ▓ë,ASCER ;err
  453. éÑ,Ñ
  454. ▓ë,ASCER ;err
  455. ┐│
  456. ┤│,Ç
  457. ▓HX 
  458.  
  459. BINAIR ⌐ö
  460. ┤Ç,(ö)
  461. Γ49 ;test 0 / 1
  462. üÇ,0 
  463. ▓╛,ASCER ;error if not
  464. BI1 ï;get bit
  465. üÑ,Ñ;prepare result
  466. ▓ë,ASCER ;overflow error
  467. ⌐ö
  468. ┤Ç,(ö);more bits
  469. Γ49 
  470. üÇ,0 
  471. ▓σ,BI1 
  472. àÇ
  473.  
  474. THEX Γ48 ;test chars 0 - 47
  475. ═ë;ret if < 48
  476. î10 ;test 58
  477. ï
  478. ═║;ret with 0 - 9
  479. Γ7 ;test 58 - 64
  480. î10 
  481. ═ë;ret if so
  482. î16 ;test for ABCDEF
  483. ï;ret C if not
  484. ═;NC = valid
  485.  
  486. STORESYM ┤Ç,(ö);1th char of label
  487. èAONLY ;test A - z
  488. ▒ë,ERR1 ;err if not
  489. ST0 ┤Ñ,SYMBTOP ;move max 14 chars into table
  490. ┤å,014 
  491. ST1 ┤(Ñ),Ç
  492. ⌐ö
  493. ⌐Ñ
  494. ┤Ç,(ö)
  495. èTESTA ;must be alphanumeric
  496. ▓ë,ST2 ;jp if end of label
  497. ¢ST1 
  498. ▒ERR1 ;label too long
  499. ST2 íä,â;save Carry
  500. ST3 ┤(Ñ),032 ;add spaces if nec.
  501. ⌐Ñ
  502. ¢ST3 
  503. ╩ö;save mempntr
  504. ┤Ñ,SYMBTOP ;= labelbuffer
  505. ┤ö,(SYMPO);point to bottom of table
  506. ▓ST6 
  507.  
  508. ST4 ┤Ñ,SYMBTOP ;= labelbuffer
  509. ST5 ┤Ç,¥;DE points to next label in
  510. ┐15 ;                       table
  511. ┤¥,Ç
  512. ⌐ö
  513. ST6 ┤Ç,(ö);compare name in buff against
  514. à127 ;     existing labels
  515. Σ(Ñ);drop any bit 7
  516. à223 ;CAPS
  517. ▓╛,ST5 ;next label if no match
  518. ;finds always name in labelbuf !!
  519. ┤å,13 ;cp 13 more chars
  520. ST7 ⌐Ñ
  521. ⌐ö
  522. ┤Ç,(ö)
  523. Σ(Ñ)
  524. à223 
  525. ▓╛,ST4 ;next label if no match
  526. ¢ST7 ;13 times
  527. █Ñ,ö;test found-address
  528. ▓╛,ST8 ;jp if not same add = found
  529. íä,â;store Zflag now
  530.  
  531. ┤Ñ,(SYMPO);test bottom of table against
  532. ┤ç,(DUMPA);                 code in mem
  533. àÇ
  534. █Ñ,ç
  535. ┤ç,32 ;room for 32 ?
  536. àÇ
  537. █Ñ,ç
  538. ▒ë,ERROUTS ;err if no room
  539.  
  540. ┤Ñ,(SYMPO);point to bot of table
  541. òÑ;make room for 2byte number
  542. òÑ
  543. òÑ
  544. íö,Ñ
  545. ┤ç,14 ;also move 14 chars from labelbuf
  546. ╢;      into symboltable
  547. ⌐ö
  548. ┤(SYMPO),ö;adjust bottompntr
  549. ST8 ┤Ç,¥;make IX point to new entry
  550. à240 
  551. ┤¥,Ç
  552. ʔ
  553. ɯ
  554. ╔ö;retrieve textfilepntr
  555. íä,â;get flag, C = existing label
  556. ═;Z = NC = new label
  557.  
  558. CONDS ┤å,000 ;construct condition bits
  559. î190 ;NZ
  560. ═σ
  561. ⌐å
  562. î229 ;Z
  563. ═σ
  564. ⌐å
  565. î186 ;NC
  566. ═σ
  567. ⌐å
  568. î137 ;C
  569. ═σ
  570. ⌐å
  571. î200 ;PO
  572. ═σ
  573. î189 ;NZ
  574. ═σ
  575. ⌐å
  576. î199 ;PE
  577. ═σ
  578. î227 ;V
  579. ═σ
  580. ⌐å
  581. î198 ;P
  582. ═σ
  583. ⌐å
  584. î185 ;M
  585.  
  586. DREG ┤ú,223 ;construct bits for reg. pair
  587. DREG1 ┤å,0 ;with or without SP = 223
  588. î135 ;BC
  589. ═σ
  590. ⌐å
  591. î148 ;DE
  592. ═σ
  593. ⌐å
  594. èHLIXY ;HL, IX, IY (store DD or FD)
  595. ═σ
  596. ⌐å
  597. îú;test given reg.
  598.  
  599. SREG1 ┤å,0 ;construct bits for single reg.
  600. î134 ;B                   (no (xx) )
  601. ═σ
  602. ⌐å
  603. î137 ;C
  604. ═σ
  605. ⌐å
  606. î146 ;D
  607. ═σ
  608. ⌐å
  609. î157 ;E
  610. ═σ
  611. ⌐å
  612. î163 ;H
  613. ═σ
  614. ⌐å
  615. î179 ;L
  616. ═σ
  617. ┤å,007 
  618. î128 ;A
  619.  
  620. SREG2 ┤å,0 ;single regs, also (HL),(IXY+n
  621. î134 ;B
  622. ═σ
  623. ⌐å
  624. î137 ;C
  625. ═σ
  626. ⌐å
  627. î146 ;D
  628. ═σ
  629. ⌐å
  630. î157 ;E
  631. ═σ
  632. ⌐å
  633. î163 ;H
  634. ═σ
  635. ⌐å
  636. î179 ;L
  637. ═σ
  638. ⌐å
  639. î"(" 
  640. ▓σ,SREG3 ;jp if indirect adressing
  641. ⌐å
  642. î128 ;A
  643. ═σ;Z = found
  644. ï
  645. ═;NC = not found
  646.  
  647. SREG3 èSKIP ;next char
  648. èHLIXY ;test HL, IX, IY
  649. ▓╛,SR5 ;exit Cflag if not found
  650. ▓ë,SR1 ;jp if indexreg.
  651. èSKIP ;next char, HL found
  652. î")" 
  653. ═σ;OK
  654. ▒ERR4 
  655. SR1 ┤│,0 ;default offset =0
  656. èSKIP 
  657. î"+" 
  658. ▓╛,SR2 ;jp with L = 0 if no offset
  659. èEVA ;get number
  660. î128 ;test max
  661. ▓ë,SR3 ;OK
  662. ▒ERR2 
  663. SR2 î"-" 
  664. ▓╛,SR4 ;exit L = 0
  665. èEVA ;get nr
  666. î129 ;test max
  667. ▒║,ERR2 
  668. SR3 ┤│,Ç;L = offset
  669. èSKIP +1 ;get char
  670. SR4 î")" 
  671. ▒╛,ERR4 
  672. SR5 ▄;signal 'indexreg.'
  673.  
  674. HLIXY î165 ;HL
  675. ═σ
  676. î175 ;IX
  677. ▓╛,HL1 
  678. ┤Ç,221 ;store DD
  679. ▓HL2 
  680. HL1 î176 ;IY
  681. ═╛
  682. ┤Ç,253 ;store FD
  683. HL2 èNOMOPS ;store
  684. ΣÇ;set Zflag
  685. ▄;C = IX, IY found
  686. ═;Z = HL found
  687.  
  688. ORBC ⌐ö;construct opcodes
  689. ┤Ç,å
  690. ▓ORY 
  691.  
  692. OR8BC ⌐ö
  693. ┤Ç,å
  694. ▓ORX 
  695.  
  696. OR16BC ⌐ö
  697. ┤Ç,å
  698. éÇ,Ç
  699. ORX éÇ,Ç
  700. éÇ,Ç
  701. éÇ,Ç
  702. ORY ┐ë
  703. ▒NOMOPS ;store byte + ret
  704.  
  705. ;SERVICE-ROUTINES (see ATOKTAB)
  706.  
  707. ⌐ö
  708. BLOCKS ┤Ç,237 
  709. èNOMOPS 
  710. NOPS ┤Ç,ë
  711. ▒NOMOPS 
  712.  
  713. RSTS èEV1 
  714. ┤å,Ç
  715. àë
  716. ▓σ,ORBC +1 
  717. ▓ER0Q 
  718.  
  719. RETS ▓╛,RE1 
  720. ┤Ç,201 
  721. ▒NOMOPS 
  722. RE1 èCONDS 
  723. ▓σ,OR8BC 
  724. ▓ER0Q 
  725.  
  726. POPS ┤ú,132 
  727. èDREG1 
  728. ▓σ,OR16BC 
  729. ▓ER0Q 
  730.  
  731. BITS èEV1 
  732. î8 
  733. ▒║,ERR2 
  734. éÇ,Ç
  735. éÇ,Ç
  736. éÇ,Ç
  737. ┐ë
  738. ┤ë,Ç
  739. èSKIP +1 
  740. î44 
  741. ▒╛,ERR4 
  742. èSKIP 
  743.  
  744. ROTAS èSREG2 
  745. ▓╛,ER0Q 
  746. ┤Ç,203 
  747. ▓║,RO1 
  748. èNOMOPS 
  749. ┤Ç,│
  750. RO1 èNOMOPS 
  751. ▓ORBC 
  752.  
  753. ADDS ┤ú,Ç;store char for test at AD2
  754. èHLIXY ;test for HLIXIY reg
  755. ▓╛,AD4 ;jp if not, must be A
  756. ┤ë,9 ;prepare for OR16BC
  757. ▓AD2 
  758. ABCS î165 ;test for HL
  759. ▓╛,AD4 ;jp if not, must be A
  760. ┤ú,Ç;store char for test
  761. ┤Ç,237 ;insert ED
  762. èNOMOPS 
  763. ┤Ç,66 ;prepare for OR16BC
  764. ê4,ë
  765. ▓╛,AD1 ;jp if C =152 =SBC
  766. ┐8 
  767. AD1 ┤ë,Ç
  768. AD2 èCOMMA ;get next char
  769. ┤å,0 ;build a number in B
  770. î135 ;BC
  771. ▓σ,AD3 
  772. ⌐å
  773. î148 ;DE
  774. ▓σ,AD3 
  775. ⌐å
  776. îú;identical reg.
  777. ▓σ,AD3 
  778. ⌐å
  779. î223 ;SP
  780. AD3 ▒σ,OR16BC ;jp if valid reg.
  781. ER0Q ▒ERR0 ;else ERROR nonsense
  782.  
  783. AD4 î128 ;use A reg. now
  784. ▓╛,LOGS ;jp if no 'A' in source
  785. ⌐ö;get char after 'A'
  786. ┤Ç,(ö)
  787. òö
  788. î"," ;test for comma
  789. ┤Ç,(ö);get previous char again
  790. ▓╛,LOGS ;cont. if no comma
  791. ⌐ö;get char after comma
  792. ⌐ö
  793. ┤Ç,(ö);use this char
  794.  
  795. LOGS èSREG2 ;is it a reg.? (Prepare index)
  796. ▓╛,LO1 ;jp if number
  797. ▒║,ORBC ;if (single) reg., insert byte
  798. èORBC ;insert code for index reg.
  799. ▓INC3 ;insert nr. in L
  800. LO1 ▓ë,ER0Q 
  801. èEV1 ;evaluate number
  802. ┤│,Ç;store nr.
  803. ┤Ç,ë;adjust opcode
  804. ┐70 
  805. èNOMOPS ;insert code in A
  806. ▓INC3 ;insert code in L
  807.  
  808. INCS èDREG ;test for reg.pair
  809. ▓╛,INC2 ;jp if not
  810. ┤Ç,3 ;prep. for OR16BC
  811. ê0,ë;test instruction
  812. ▓σ,INC1 
  813. ┐8 
  814. INC1 ┤ë,Ç
  815. ▒OR16BC 
  816. INC2 èSREG2 
  817. ▒╛,ERR0 
  818. ▒║,OR8BC 
  819. èOR8BC 
  820. INC3 ┤Ç,│
  821. ▒NOMOPS 
  822.  
  823. CALLS èCONDS 
  824. ▓╛,CA1 
  825. èOR8BC +1 
  826. èCOMMA 
  827. ▓CA2 
  828. CA1 ┤Ç,205 
  829. èNOMOPS 
  830. CA2 èE1 
  831. CA3 ┤Ç,│
  832. èNOMOPS 
  833. ┤Ç,ú
  834. ▒NOMOPS 
  835.  
  836. JPS èCONDS 
  837. ▓╛,JP1 
  838. èOR8BC +1 
  839. èCOMMA 
  840. ▓CA2 
  841. JP1 î40 
  842. ▓σ,JP2 
  843. ┤Ç,195 
  844. ▓CA1 +2 
  845. JP2 èSKIP 
  846. èHLIXY 
  847. ▒╛,ERR0 
  848. èSKIP 
  849. î41 
  850. ▒╛,ERR4 
  851. ⌐ö
  852. ┤Ç,233 
  853. ▒NOMOPS 
  854.  
  855. JRS èCONDS 
  856. ▓╛,JR1 
  857. ┤Ç,å
  858. î4 
  859. ▒║,ERR0 
  860. èOR8BC +1 
  861. èCOMMA 
  862. ▓JR2 
  863. JR1 ┤Ç,24 
  864. èNOMOPS 
  865. JR2 ┤ç,(TEMPASP)
  866. ┤Ç,ë
  867. Γ126 
  868. ┤ë,Ç
  869. ▓║,JR3 
  870. òå
  871. JR3 èE1 
  872. ▒ë,NOMOPS 
  873. █Ñ,ç
  874. ┤Ç,ú
  875. ┐Ç
  876. ▒╛,ERR2 
  877. ┤Ç,│
  878. Σ128 
  879. ▒NOMOPS 
  880.  
  881. DJNZS ┤Ç,ë
  882. èNOMOPS 
  883. ▓JR2 
  884.  
  885. DEFBS èEV1 
  886. èNOMOPS 
  887. èESTM +1 
  888. ═σ
  889. î"," 
  890. ▒╛,ERR4 
  891. ⌐ö
  892. ▓DEFBS 
  893.  
  894. DEFWS èCA2 
  895. èESTM +1 
  896. ═σ
  897. î"," 
  898. ▒╛,ERR4 
  899. ⌐ö
  900. ▓DEFWS 
  901.  
  902. DEFSS èE1 ;get number
  903. ▒ë,ERR1 ;err if not
  904. ╩Ñ;store number
  905. ┤ç,(ASSPOINT);inc asspnt
  906. éÑ,ç
  907. ┤(ASSPOINT),Ñ
  908. ╔ç;retrieve number
  909. ┤Ñ,(dumpa);inc dumpaddr also
  910. éÑ,ç
  911. ┤(dumpa),Ñ
  912.  
  913. DEFMS ═σ;ret if 1th char is enter
  914. îë;test for quote
  915. ▒╛,ERR4 
  916. ⌐ö
  917. DE1 ┤Ç,(ö);next char
  918. î13 
  919. ▒σ,ERR4 ;err if no end-quote
  920. ⌐ö
  921. îë;test second quote
  922. ═σ;exit if found
  923. èNOMOPS ;else continue inserting
  924. ▓DE1 
  925.  
  926. ORGS èE1 ;get number
  927. ▒ë,ERR1 
  928. ┤(ASSPOINT),Ñ
  929.  
  930. DUMPS èE1 ;get number
  931. ▒ë,ERR3 ;jp if no number
  932. ┤Ç,ú;test for dump = 0
  933. ┐│
  934. ▓σ,nwdp 
  935. èERROUTR ;test against symbtable-bottom
  936. ╩Ñ;store nw dumpaddr
  937. ┤ç,(FILEND)
  938. █Ñ,ç;test against end of file
  939. ▒ë,ERROUTS ;jp if no room
  940. ɥ
  941. nwdp ┤(DUMPA),Ñ;set nw dumpaddr.
  942. ┤(DUMPF),Ñ
  943.  
  944. ENDS ┤▀,(storevar);end of assembling
  945.  
  946. EXS î148 ;DE
  947. ▓σ,AEX1 
  948. î132 ;AF
  949. ▓σ,AEX2 
  950. î"(" 
  951. ▓╛,ER0R 
  952. èSKIP 
  953. î223 ;SP
  954. ▓╛,ER0R 
  955. èSKIP 
  956. î")" 
  957. ▓╛,ER4R 
  958. èCOMMA 
  959. èHLIXY 
  960. ▓╛,ER0R 
  961. ┤Ç,227 
  962. ▓EX3 
  963. AEX1 èCOMMA 
  964. î165 
  965. ▓╛,ER0R 
  966. ┤Ç,235 
  967. ▓EX3 
  968. AEX2 èCOMMA 
  969. î131 ;AF'
  970. ▓╛,ER0R 
  971. ┤Ç,8 
  972. EX3 ⌐ö
  973. ▒NOMOPS ;store
  974.  
  975. INS î128 
  976. ▓╛,INS2 
  977. èCOMMA 
  978. î"(" 
  979. ER4R ▓╛,ER4RX 
  980. èSKIP 
  981. î137 
  982. ▓╛,INS1 
  983. ┤å,7 
  984. ▓INS3 
  985. INS1 ┤Ç,219 
  986. èNOMOPS 
  987. èEV1 
  988. ▒LD6 +1 
  989. INS2 èSREG1 
  990. ER0R ▓╛,ER0RX 
  991. èCOMMA 
  992. î40 
  993. ▓╛,ER4RX 
  994. èSKIP 
  995. î137 
  996. ▓╛,ER0RX 
  997. INS3 èSKIP 
  998. î")" 
  999. ▓╛,ER4RX 
  1000. ┤Ç,237 
  1001. èNOMOPS 
  1002. ▒OR8BC 
  1003.  
  1004. OUTS î"(" 
  1005. ▓╛,ER4RX 
  1006. èSKIP 
  1007. î137 ;C
  1008. ▓σ,OUT3 
  1009. ┤Ç,211 
  1010. èNOMOPS 
  1011. èEV1 
  1012. OUT1 èNOMOPS 
  1013. èSKIP +1 
  1014. î")" 
  1015. ▓╛,ER4RX 
  1016. OUT2 èCOMMA 
  1017. î128 ;A
  1018. ▓╛,ER0RX 
  1019. ⌐ö
  1020. OUT3 èSKIP 
  1021. î")" 
  1022. ER4RX ▒╛,ERR4 
  1023. ┤Ç,237 
  1024. èNOMOPS 
  1025. èCOMMA 
  1026. èSREG1 
  1027. ▒σ,OR8BC 
  1028. ER0RX ▒ERR0 
  1029.  
  1030. IMS èEV1 ;get number
  1031. î3 ;test max
  1032. ▒║,ERR2 
  1033. ┤│,Ç
  1034. ┤Ç,237 
  1035. èNOMOPS 
  1036. ┤Ç,70 
  1037. ò│
  1038. ▓σ,IMT 
  1039. ò│
  1040. ▒╛,NOMOPS 
  1041. ┐8 
  1042. IMT ┐16 
  1043. ▒NOMOPS 
  1044.  
  1045. LDS î128 ;A
  1046. ▓╛,LD11 
  1047. èCOMMA 
  1048. ┤ë,120 
  1049. èSREG2 
  1050. ▒σ,LD15 -3 
  1051.  
  1052. LD1 ▓║,LD8 
  1053. î135 ;BC
  1054. ▓╛,LD2 
  1055. ┤Ç,10 
  1056. ▓LD6 
  1057. LD2 î148 ;DE
  1058. ▓╛,LD3 
  1059. ┤Ç,26 
  1060. ▓LD6 
  1061.  
  1062. LD3 ┤Ç,58 
  1063. LD4 èNOMOPS 
  1064. LD5 èCA2 
  1065. ▓LD7 
  1066. LD6 ⌐ö
  1067. èNOMOPS 
  1068. LD7 èSKIP +1 
  1069. î41 
  1070. ▒╛,ERR4 
  1071. ⌐ö
  1072.  
  1073. LD8 î166 ;I
  1074. ▓σ,LD9 
  1075. î203 ;R
  1076. ▓σ,LD10 
  1077. ┤Ç,62 
  1078. ▒LD19 
  1079.  
  1080. LD9 ┤ë,87 
  1081. ▒BLOCKS -1 
  1082. LD10 ┤ë,95 
  1083. ▒BLOCKS -1 
  1084. LD11 èDREG 
  1085. ▓╛,LD14 
  1086. èCOMMA 
  1087. î40 
  1088. ▓╛,LD12 
  1089. ⌐ö
  1090. ┤Ç,å
  1091. î2 
  1092. ┤Ç,42 
  1093. ▓σ,LD4 
  1094. ┤Ç,237 
  1095. èNOMOPS 
  1096. ┤ë,75 
  1097. èOR16BC +1 
  1098. ▓LD5 
  1099.  
  1100. LD12 ┤│,Ç
  1101. ┤Ç,å
  1102. î3 
  1103. ┤Ç,│
  1104. ▓╛,LD13 
  1105. èHLIXY 
  1106. ▓╛,LD13 
  1107. ┤Ç,249 
  1108. ⌐ö
  1109. ▒NOMOPS 
  1110.  
  1111. LD13 ┤ë,1 
  1112. èOR16BC +1 
  1113. ▒CA2 
  1114.  
  1115. LD14 èSREG2 
  1116. ▓╛,LD20 
  1117. ┤Ç,å
  1118. ʄ
  1119. éÇ,Ç
  1120. éÇ,Ç
  1121. éÇ,Ç
  1122. ┐ë
  1123. ┤ë,Ç
  1124. Ʉ
  1125. ▓ë,LD16 
  1126. î6 
  1127. ▓σ,LD17 
  1128. èCOMMA 
  1129. èSREG2 
  1130. ▓╛,LD18 
  1131. ▒║,ORBC 
  1132. LD15 èORBC 
  1133. ┤Ç,│
  1134. ▒NOMOPS 
  1135.  
  1136. LD16 èCOMMA 
  1137. èSREG1 
  1138. ▓σ,LD15 
  1139. ┤Ç,ë
  1140. à63 
  1141. ┐6 
  1142. èNOMOPS 
  1143. ┤Ç,│
  1144. ▓LD19 
  1145. LD17 èCOMMA 
  1146. èSREG1 
  1147. ▒σ,ORBC 
  1148. LD18 ┤Ç,ë
  1149. à63 
  1150. ┐6 
  1151. LD19 èNOMOPS 
  1152. èEV1 
  1153. ▒NOMOPS 
  1154.  
  1155. LD20 ▓ë,LD23 
  1156. î166 
  1157. ▓╛,LD22 
  1158. ┤ë,71 
  1159. LD21 èBLOCKS 
  1160. ▒OUT2 
  1161.  
  1162. LD22 î203 
  1163. ┤ë,79 
  1164. ▓σ,LD21 
  1165. ▓ERR0 
  1166.  
  1167. LD23 î135 
  1168. ▓╛,LD24 
  1169. ┤Ç,2 
  1170. ⌐ö
  1171. ▒OUT1 
  1172. LD24 î148 
  1173. ▓╛,LD25 
  1174. ┤Ç,18 
  1175. ⌐ö
  1176. ▒OUT1 
  1177.  
  1178. LD25 èE1 
  1179. èSKIP +1 
  1180. î41 
  1181. ▓╛,ERR4 
  1182. èCOMMA 
  1183. î128 
  1184. ▓╛,LD27 
  1185. ┤Ç,50 
  1186. LD26 èNOMOPS 
  1187. ▓LD28 
  1188.  
  1189. LD27 ╩Ñ
  1190. èDREG 
  1191. ɥ
  1192. ▓╛,ERR0 
  1193. ┤Ç,å
  1194. î2 
  1195. ┤Ç,34 
  1196. ▓σ,LD26 
  1197. ┤Ç,237 
  1198. èNOMOPS 
  1199. ┤ë,67 
  1200. èOR16BC +1 
  1201. LD28 ⌐ö
  1202. ▒CA3 
  1203.  
  1204. AMS û18,1,65 ;flash A msge
  1205. û18,0,255 
  1206.  
  1207. ERR0 ┤Ñ,EM0 ;addr of errmsge
  1208. û221 ;use IY to skip
  1209. ERR1 ┤Ñ,EM1 
  1210. û221 
  1211. ERR2 ┤Ñ,EM2 
  1212. û221 
  1213. ERR3 ┤Ñ,EM3 
  1214. û221 
  1215. ERR4 ┤Ñ,EM4 
  1216. û221 
  1217. ERR5 ┤Ñ,EM5 
  1218.  
  1219. ┤Ç,(inclflag);including?
  1220. àÇ
  1221. ┤Ç,1 ;if so, then exit, and
  1222. ▒╛,testex ;signal the error in NOROOMFLG
  1223. ┤å,0 ;HL points to errmsge
  1224. ┤ë,(Ñ);get length in BC
  1225. òÑ;backwards!
  1226. ʥ
  1227. ʇ
  1228. ┤Ñ,ERRCNT 
  1229. ┤Ç,20 ;test for max errors
  1230. î(Ñ)
  1231. ▒ë,ENDS ;exit if so
  1232. ⌐(Ñ);count errors
  1233.  
  1234. ERM ┤Ç,(ö);DE points to fileaddr
  1235. ⌐ö;find end of line with error
  1236. î13 
  1237. ▓╛,ERM 
  1238.  
  1239. ┤Ñ,(FILEND);test room for errorline
  1240. èERROUTR 
  1241.  
  1242. █Ñ,ö;make room in file
  1243. ┤å,ú;DE = start of next line
  1244. ┤ë,│;BC = length of 'tail'
  1245. ⌐ç
  1246. ┤Ñ,(FILEND)
  1247. ╔ö;length of errorline
  1248. ʔ
  1249. éÑ,ö;calc. total length of errline
  1250. ┤ö,8 ;len '(c) ERROR '
  1251. éÑ,ö
  1252. íö,Ñ;prepare to make room
  1253. ┤Ñ,(FILEND)
  1254. ┤(FILEND),ö;adjust file-end
  1255. ╢;make room
  1256. ɇ
  1257. ɥ
  1258. ╢;insert errmsge
  1259. ┤ç,8 
  1260. ┤Ñ,ERRMSG -1 ;insert '(c) ERROR '
  1261. ╢;backwards!
  1262. ⌐ö
  1263. ┤Ñ,PASS 
  1264. ╠0,(Ñ);signal 'no second pass'
  1265. EXIT ┤▀,(storevar);clear stack
  1266. ▒A4 ;continue assembling
  1267.  
  1268. û127 
  1269. ù" ERROR " 
  1270. ERRMSG á$
  1271.  
  1272. ù"Nonsense" 
  1273. û13 
  1274. EM0 û9 ;len
  1275.  
  1276. ù"Label?" 
  1277. û13 
  1278. EM1 û7 
  1279.  
  1280. ù"Range?" 
  1281. û13 
  1282. EM2 û7 
  1283.  
  1284. ù"Number?" 
  1285. û13 
  1286. EM3 û8 
  1287.  
  1288. ù"Char?" 
  1289. û13 
  1290. EM4 û6 
  1291.  
  1292. ù"Multiple!" 
  1293. û13 
  1294. EM5 û10 
  1295.  
  1296. ERROUTR ┤Ç,(SYMPO +1);test HL aginst bottom of
  1297. òÇ;                symboltable
  1298. îú
  1299. ═║
  1300. ERROUTS ┤▀,(storevar);balance stack
  1301. ┤Ç,2 
  1302. testex ┤(noroomflg),Ç;signal 'no room'
  1303. ▒ends 
  1304.  
  1305. MERM ù"MEMORY " 
  1306. ù"CONFLICT" 
  1307. û255 
  1308.