home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 9 / 64er_Magazin_Sonderheft_09_86-09_1986_Markt__Technik_de_Side_A.d64 / track40.source (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  23KB  |  850 lines

  1. 100 ;   basic-erweiterung zur nuetzung der spuren 36-40 auf der diskette
  2. 110 ;                                       :
  3. 120 ;          germano caronni
  4. 130 ;          greubstelstr.10
  5. 140 ;         ch-5430 wettingen
  6. 150 ;         tel.0041/56262574
  7. 160 ;                                       :
  8. 900 ;
  9. 49152 ".ba  49152 ;zuerst drei floppy-routinen dann hauptprogramm
  10. 49152 " lda  7168 ;start 50000 einsprungpunkt vom interpret 50022
  11. 49155 " and  #159 ;formatieren (36-40)  --- dc-timer fuer spur 36 und hoeher
  12. 49157 " sta  7168 ;einrichten
  13. 49160 " ldy    #4
  14. 49162 " sty    49
  15. 49164 " ldy    #0
  16. 49166 " sty    48 ;zeiger  auf 1024
  17. 49168 " sty    52
  18. 49170 " lda   #14
  19. 49172 " sta    82 ;header-kennzeichen
  20. 49174 " lda  2046
  21. 49177 " sta    83 ;spur
  22. 49179 " sty    84 ;sektor
  23. 49181 " lda    #0
  24. 49183 " sta    85 ;leer
  25. 49185 " tya
  26. 49186 " pha       ;sektor retten
  27. 49187 " jsr 63184 ;diese fuenf bytes in gcr-code wandeln und ab $400 ablegen
  28. 49190 " pla       ;(das gibt die einzelnen header fuer die sektoren einer spur)
  29. 49191 " tay       ;sektor wieder holen
  30. 49192 " iny
  31. 49193 " cpy  2045 ;schauen ob letzter sektor
  32. 49196 " bne 49170 ;wenn nicht dann den naechsten umwandeln
  33. 49198 " lda    52 ;die adresse des letzten bytes des letzten sektors +1 holen
  34. 49200 " sta  2047 ;und retten
  35. 49203 " lda   #13
  36. 49205 " sta    71 ;datenblockkennzeichen
  37. 49207 " ldy    #0
  38. 49209 " tya
  39. 49210 " sta   768,y
  40. 49213 " iny
  41. 49214 " bne 49210 ;datenblock ab 768 mit lauter nullen fuellen
  42. 49216 " sta    48
  43. 49218 " sta    52
  44. 49220 " lda    #3
  45. 49222 " sta    49 ;die zeiger auf $300 richten (768)
  46. 49224 " jsr 62953 ;pruefsumme berechnen
  47. 49227 " sta    58 ;und speichern
  48. 49229 " jsr 63375 ;datenblock in gcr-kode wandeln
  49. 49232 " jsr 65038 ;dc auf schreiben und die spur loeschen
  50. 49235 " ldx    #0
  51. 49237 " ldy    #5
  52. 49239 " lda  #255
  53. 49241 " bvc 49241
  54. 49243 " clv
  55. 49244 " sta  7169 ;5*255 als header-sync(hronistationsmarkierung) auf diskette
  56. 49247 " dey
  57. 49248 " bne 49241
  58. 49250 " ldy    #5
  59. 49252 " lda  1024,x
  60. 49255 " inx
  61. 49256 " bvc 49256
  62. 49258 " clv
  63. 49259 " sta  7169 ;dann die 5 header-bytes
  64. 49262 " dey
  65. 49263 " bne 49252
  66. 49265 " ldy    #9
  67. 49267 " lda   #85
  68. 49269 " bvc 49269
  69. 49271 " clv
  70. 49272 " sta  7169 ;9 leerbytes als luecke abspeichern
  71. 49275 " dey
  72. 49276 " bne 49269
  73. 49278 " ldy    #5
  74. 49280 " lda  #255
  75. 49282 " bvc 49282
  76. 49284 " clv
  77. 49285 " sta  7169   ;datenblock-sync
  78. 49288 " dey
  79. 49289 " bne 49282
  80. 49291 " ldy  #187
  81. 49293 " lda   256,y ;den ersten teil des umgewandelten blockes auf diskette
  82. 49296 " bvc 49296
  83. 49298 " clv
  84. 49299 " sta  7169
  85. 49302 " iny
  86. 49303 " bne 49293
  87. 49305 " lda   768,y ;und dann den zweiten teil
  88. 49308 " bvc 49308
  89. 49310 " clv
  90. 49311 " sta  7169
  91. 49314 " iny
  92. 49315 " bne 49305
  93. 49317 " ldy    #7
  94. 49319 " lda   #85
  95. 49321 " bvc 49321
  96. 49323 " clv
  97. 49324 " sta  7169   ;wieder 7 bytes luecke
  98. 49327 " dey
  99. 49328 " bne 49321
  100. 49330 " cpx  2047   ;schauen ob alle sektoren eingerichtet
  101. 49333 " bne 49237   ;wenn nicht dann den naechsten
  102. 49335 " jsr 65024   ;dc auf lesen schalten
  103. 49338 " lda    #7
  104. 49340 " sta    71   ;datenblock-kennzeichen wieder richten
  105. 49342 " jmp 64926   ;zurueck zur normalen floppy irq-routine
  106. 49345 " lda   #16   ;eisprungspunkt mit m-e
  107. 49347 " sta  2045   ;pro spur 16 sektoren einrichten
  108. 49350 " ldx   #36
  109. 49352 " stx  2046   ;spur 36
  110. 49355 " stx    10   ;dem irq-prg bekannt geben
  111. 49357 " lda  #224
  112. 49359 " sta     2   ;irq-prg starten
  113. 49361 " lda     2
  114. 49363 " bmi 49361   ;warten auf fertig
  115. 49365 " inx
  116. 49366 " cpx   #40   ;schauen ob schon bei spur 40
  117. 49368 " bcc 49352   ;wenn nicht naechste spur
  118. 49370 " dec  2045   ;pro spur 15 sektoren
  119. 49373 " cpx   #41
  120. 49375 " bne 49352   ;und die spur 40 noch formatieren
  121. 49377 " rts         ;ende
  122. 49378 " lda  7168   ;einen block ab $400 speichern (spur+sektor in 2046,2047)
  123. 49381 " and  #159   ;dc-timer richten
  124. 49383 " sta  7168
  125. 49386 " lda    #0
  126. 49388 " tay
  127. 49389 " clc
  128. 49390 " adc  1024,y ;erste (interne) pruefsumme berechnen
  129. 49393 " iny
  130. 49394 " cpy  #255
  131. 49396 " bne 49389
  132. 49398 " sta  1279   ;und als letztes datenblock-byte speichern
  133. 49401 " lda   #13
  134. 49403 " sta    71   ;datenblock kennzeichen richten
  135. 49405 " lda    #4
  136. 49407 " sta    49
  137. 49409 " lda    #0
  138. 49411 " sta    48   ;zeiger auf $400
  139. 49413 " sta    52
  140. 49415 " jsr 62953   ;pruefsumme berechnen
  141. 49418 " sta    58   ;speichern
  142. 49420 " jsr 63375   ;datenblock umwandeln in gcr-kode
  143. 49423 " lda   #14   ;header aufbauen
  144. 49425 " sta    82   ;header-kennzeichen
  145. 49427 " lda  2046
  146. 49430 " sta    83   ;spur
  147. 49432 " lda  2047
  148. 49435 " sta    84   ;sektor
  149. 49437 " lda    #0
  150. 49439 " sta    85   ;leer
  151. 49441 " sta    48
  152. 49443 " sta    52
  153. 49445 " lda    #3   ;zeiger auf $300
  154. 49447 " sta    49
  155. 49449 " jsr 63184   ;header in gcr umwandeln (ab 768 im speicher)
  156. 49452 " jsr  1520   ;warten auf sync
  157. 49455 " bvc 49455
  158. 49457 " clv
  159. 49458 " lda  7169
  160. 49461 " cmp   768,y ;richtigen header suchen
  161. 49464 " bne 49452   ;wenn nicht dann naechsten
  162. 49466 " iny
  163. 49467 " cpy    #5
  164. 49469 " bne 49455
  165. 49471 " lda    #7
  166. 49473 " sta    71   ;datenblock-kennzeichen wieder richten (verzoegerung)
  167. 49475 " ldx    #6
  168. 49477 " bvc 49477   ;6 bytes ueberlesen
  169. 49479 " clv
  170. 49480 " dex
  171. 49481 " bne 49477
  172. 49483 " lda  #255
  173. 49485 " sta  7171
  174. 49488 " lda  7180
  175. 49491 " and   #31
  176. 49493 " ora  #192
  177. 49495 " sta  7180   ;dc auf schreiben umschalten
  178. 49498 " lda  #255
  179. 49500 " ldx    #5
  180. 49502 " sta  7169   ;5 bytes daten-sync schreiben
  181. 49505 " clv
  182. 49506 " bvc 49506
  183. 49508 " clv
  184. 49509 " dex
  185. 49510 " bne 49506
  186. 49512 " ldy  #187
  187. 49514 " lda   256,y ;ersten teil des blockes
  188. 49517 " bvc 49517
  189. 49519 " clv
  190. 49520 " sta  7169
  191. 49523 " iny
  192. 49524 " bne 49514
  193. 49526 " lda  1024,y ;und dann den zweiten teil schreiben
  194. 49529 " bvc 49529
  195. 49531 " clv
  196. 49532 " sta  7169
  197. 49535 " iny
  198. 49536 " bne 49526
  199. 49538 " bvc 49538   ;warten das das letzte byte fertig geschrieben ist
  200. 49540 " jsr 65024   ;dc auf lesen
  201. 49543 " jsr  1520   ;warten auf sync
  202. 49546 " bvc 49546
  203. 49548 " clv
  204. 49549 " lda  7169
  205. 49552 " cmp   768,y ;den richtigen header suchen
  206. 49555 " bne 49543
  207. 49557 " iny
  208. 49558 " cpy    #5
  209. 49560 " bne 49546
  210. 49562 " bne 49452
  211. 49564 " jsr  1520
  212. 49567 " ldy  #187
  213. 49569 " lda   256,y ;und den soeben geschrieben block kontrollieren
  214. 49572 " bvc 49572
  215. 49574 " clv
  216. 49575 " eor  7169
  217. 49578 " bne 49562   ;wenn fehler dann alles von vorne
  218. 49580 " iny
  219. 49581 " bne 49569
  220. 49583 " lda  1024,y ;zweiten teil kontrollieren
  221. 49586 " bvc 49586
  222. 49588 " clv
  223. 49589 " eor  7169
  224. 49592 " bne 49562
  225. 49594 " iny
  226. 49595 " bne 49583
  227. 49597 " jmp 64926   ;zurueck zur floppy irq-routine
  228. 49600 " lda  2046
  229. 49603 " sta    10   ;spur festlegen
  230. 49605 " lda  #224   ;irq-prg. starten
  231. 49607 " sta     2
  232. 49609 " lda     2
  233. 49611 " bmi 49609   ;warten auf fertig
  234. 49613 " .by 234 234 ;luecke
  235. 49615 " .by 234 234
  236. 49617 " rts         ;ende
  237. 49618 " bit  7168   ;warten auf sync
  238. 49621 " bmi 49618   ;wenn noch keine dann nochmal
  239. 49623 " lda  7169
  240. 49626 " clv         ;dc-port freimachen
  241. 49627 " ldy    #0
  242. 49629 " rts
  243. 49630 " lda  7168   ;einen block lesen und in $300 speichern tr+se 2046,2047
  244. 49633 " and  #159   ;dc-timer richten
  245. 49635 " sta  7168
  246. 49638 " lda   #14
  247. 49640 " sta    82   ;header einrichten
  248. 49642 " lda  2046
  249. 49645 " sta    83   ;spur
  250. 49647 " lda  2047
  251. 49650 " sta    84   ;sektor
  252. 49652 " lda    #0
  253. 49654 " sta    85   ;leer
  254. 49656 " sta    52
  255. 49658 " sta    48
  256. 49660 " lda    #3   ;zeiger auf $300
  257. 49662 " sta    49
  258. 49664 " jsr 63184   ;header umwandeln
  259. 49667 " bit  7168   ;warten auf sync
  260. 49670 " bmi 49667
  261. 49672 " lda  7169
  262. 49675 " clv
  263. 49676 " ldy    #0
  264. 49678 " bvc 49678
  265. 49680 " clv
  266. 49681 " lda  7169
  267. 49684 " cmp   768,y ;den richtigen header suchen
  268. 49687 " bne 49667
  269. 49689 " iny
  270. 49690 " cpy    #5
  271. 49692 " bne 49678
  272. 49694 " ldy    #0
  273. 49696 " bit  7168   ;warten auf sync
  274. 49699 " bmi 49696
  275. 49701 " lda  7169
  276. 49704 " clv
  277. 49705 " bvc 49705
  278. 49707 " clv
  279. 49708 " lda  7169
  280. 49711 " sta   768,y ;ersten teil des blockes
  281. 49714 " iny
  282. 49715 " bne 49705
  283. 49717 " ldy  #186
  284. 49719 " bvc 49719
  285. 49721 " clv
  286. 49722 " lda  7169
  287. 49725 " sta   256,y ;und dann den zweiten teil lesen und speichern
  288. 49728 " iny
  289. 49729 " bne 49719
  290. 49731 " jsr 63712   ;in hex-bytes umwandeln
  291. 49734 " lda    56
  292. 49736 " cmp   #13   ;schauen ob datenblock-kennzeichen stimmt
  293. 49738 " bne 49638   ;wenn nicht alles von vorne
  294. 49740 " lda    #0
  295. 49742 " sta    48
  296. 49744 " lda    #3
  297. 49746 " sta    49   ;zeiger wieder auf $300
  298. 49748 " jsr 62953   ;pruefsumme berechnen
  299. 49751 " cmp    58   ;kontrolle
  300. 49753 " bne 49638   ;wenn falsch nochmals
  301. 49755 " lda    #0
  302. 49757 " tay
  303. 49758 " clc
  304. 49759 " adc   768,y ;interne pruefsumme berechnen
  305. 49762 " iny
  306. 49763 " cpy  #255
  307. 49765 " bne 49758
  308. 49767 " cmp  1023   ;und kontrolle
  309. 49770 " bne 49753
  310. 49772 " jmp 64926   ;zurueck zum irq
  311. 49775 " lda  2046
  312. 49778 " sta    10
  313. 49780 " lda  #224
  314. 49782 " sta     2
  315. 49784 " lda     2
  316. 49786 " bmi 49784
  317. 49788 " rts         ;ende
  318. 49789 ".by  'i' '#2' 'b-p 2 0' 8  ;daten (die >8< ist die drivenummer)
  319. 49800 " lda  #226   ;routine zum senden einer der drei floppy-prg.(formatieren)
  320. 49802 ".by   44     ;bit ...
  321. 49803 " lda  #252   ;einsprung (schreiben)
  322. 49805 ".by   44     ;bit ...
  323. 49806 " lda  #159   ;einsprung (lesen)
  324. 49808 " pha         ;retten
  325. 49809 " jsr 65511   ;clall alle kanaele schliessen
  326. 49812 " lda    #1   ;log. file nr.
  327. 49814 " ldx 49799   ;geraete-adresse (8)
  328. 49817 " ldy   #15   ;sekundaeradr.
  329. 49819 " jsr 65466   ;setlfs
  330. 49822 " lda    #1   ;laenge
  331. 49824 " ldx  #125   ;adresse
  332. 49826 " ldy  #194
  333. 49828 " jsr 65469   ;setnam
  334. 49831 " jsr 65472   ;open (das ganze entspricht open1,8,15,"i"
  335. 49834 " bcc 49839   ;wenn kein fehler
  336. 49836 " jmp 57593   ;fehlerauswertung
  337. 49839 " lda    #2
  338. 49841 " ldx 49799
  339. 49844 " tay
  340. 49845 " jsr 65466   ;setlfs
  341. 49848 " lda    #2
  342. 49850 " ldx  #126
  343. 49852 " ldy  #194
  344. 49854 " jsr 65469   ;setnam
  345. 49857 " jsr 65472   ;open (open2,8,2,"#2")
  346. 49860 " bcs 49836   ;fehler?
  347. 49862 " jsr 65484   ;clrchn (alle ausgabe- eingabekanaele ruecksetzen)
  348. 49865 " ldx    #2
  349. 49867 " jsr 65478   ;chkin (kanal 2 auf eingabe richten)
  350. 49870 " jsr 65487   ;chrin (ein byte vom seriellen bus holen-puffernummer)
  351. 49873 " jsr 65484   ;chrchn
  352. 49876 " ldx    #1
  353. 49878 " jsr 65481   ;chkout (kanal 1 als ausgabe definieren)
  354. 49881 " bcs 49836   ;fehler?
  355. 49883 " ldy    #0
  356. 49885 " lda 49792,y ;'b-p 2 0'
  357. 49888 " jsr 65490   ;chrout  (ein byte ausgeben)
  358. 49891 " iny
  359. 49892 " cpy    #7   ;schauen ob alles
  360. 49894 " bne 49885
  361. 49896 " jsr 65484   ;clrchn
  362. 49899 " ldx    #2
  363. 49901 " jsr 65481   ;chkout
  364. 49904 " bcs 49836
  365. 49906 " pla         ;die am anfang gerette laenge des prg. wieder holen
  366. 49907 " sta   143   ;und abspeichern
  367. 49909 " ldy    #0
  368. 49911 " lda   143   ;schauen welches
  369. 49913 " cmp  #226
  370. 49915 " bne 49923
  371. 49917 " lda 49152,y ;formatieren
  372. 49920 " jmp 49940
  373. 49923 " cmp  #252
  374. 49925 " bne 49933
  375. 49927 " lda 49378,y ;schreiben
  376. 49930 " jmp 49940
  377. 49933 " cmp  #159
  378. 49935 " bne 49836
  379. 49937 " lda 49630,y ;lesen
  380. 49940 " jsr 65490   ;gesendet werden muss (chrout)
  381. 49943 " bcs 49836   ;fehler?
  382. 49945 " iny
  383. 49946 " cpy   143   ;schauen ob das ganze prg. gesendet wurde
  384. 49948 " bne 49911   ;wenn nicht naechstes byte
  385. 49950 " jsr 65484   ;clrchn
  386. 49953 " lda    #2
  387. 49955 " jmp 65475   ;close (kanal 2 wird geschlossen)
  388. 49958 ".by 'm-e' 0 5
  389. 49963 ".by 'm-w' 254 7 2 36 0
  390. 49971 ".by '#0' '#1'
  391. 49975 " sta 49961   ;einspungpunkt abspeichern und m-e senden
  392. 49978 " jsr 65484   ;clrchn
  393. 49981 " ldx    #1
  394. 49983 " jsr 65481   ;chkout
  395. 49986 " ldy    #0
  396. 49988 " lda 49958,y ;'m-e' x 5
  397. 49991 " jsr 65490   ;chrout
  398. 49994 " iny
  399. 49995 " cpy    #5
  400. 49997 " bne 49988
  401. 49999 " rts
  402. 50000 " lda  #102   ;**startadresse**
  403. 50002 " sta   776
  404. 50005 " lda  #195
  405. 50007 " sta   777   ;basic-befehl abarbeitungs-schlaufe auf die eigene routine
  406. 50010 " rts         ;biegen
  407. 50011 " lda  #228   ;**endadresse**
  408. 50013 " ldy  #167
  409. 50015 " sta   776
  410. 50018 " sty   777   ;interpreter-zeiger wieder richten,um diese erweiterung
  411. 50021 " rts         ;auszuschalten
  412. 50022 " jsr   115   ;**einspungpunkt** vom interpreter her (ein prg.byte holen)
  413. 50025 " cmp   #91   ;schauen ob es das '['-zeichen ist
  414. 50027 " beq 50032   ;wenn ja dann weiter
  415. 50029 " jmp 50644   ;wenn nicht dann zur original-routine
  416. 50032 " jsr   115   ;naechstes basic-byte holen
  417. 50035 " cmp  #162   ;schauen ob es der 'new'-code ist
  418. 50037 " bne 50084   ;wenn nicht dann weiter-kontrollieren
  419. 50039 " jsr   115   ;naechstes zeichen
  420. 50042 " cmp   #93   ;und schauen ob ']'
  421. 50044 " beq 50049
  422. 50046 " jmp 44808   ;wenn nein syntax-error
  423. 50049 " jsr 49800   ;formatier-prg. senden
  424. 50052 " lda  #193
  425. 50054 " jsr 49975   ;und starten
  426. 50057 " jsr 65484   ;clrchn (warten das die routine fertig ist)
  427. 50060 " ldx    #1
  428. 50062 " jsr 65481   ;chkout
  429. 50065 " lda   #73   ;und ein 'i' senden (initialisierung der floppy)
  430. 50067 " jsr 65490   ;chrout
  431. 50070 " jsr 65484   ;clrchn
  432. 50073 " lda    #1
  433. 50075 " jsr 65475   ;close
  434. 50078 " jsr   115   ;naechstes byte holen
  435. 50081 " jmp 42926   ;und zurueck zur originalroutine
  436. 50084 " cmp  #148   ;schauen ob es der 'save'-code ist
  437. 50086 " beq 50091
  438. 50088 " jmp 50455   ;wenn nicht weiterkontrollieren
  439. 50091 " jsr   115   ;naechstes zeichen nach dem 'save' holen
  440. 50094 " jsr 44426   ;die variable (zahl) auswerten
  441. 50097 " jsr 47095   ;in zweibyte-form wandeln
  442. 50100 " sty   251   ;und abspeichern
  443. 50102 " sta   252
  444. 50104 " jsr 44797   ;pruefen auf komma
  445. 50107 " jsr 44426
  446. 50110 " jsr 47095   ;zweibyte-zahl holen
  447. 50113 " sty   253
  448. 50115 " sta   254   ;und als endadresse speichern
  449. 50117 " jsr 44797   ;pruefen auf komma
  450. 50120 " lda   253
  451. 50122 " sec
  452. 50123 " sbc   251
  453. 50125 " sta   139    ;endadresse-anfangsadresse in (139)
  454. 50127 " lda   254
  455. 50129 " sbc   252
  456. 50131 " sta   140    ;abspeichern
  457. 50133 " bcs 50140
  458. 50135 " ldx   #20    ;wenn endadresse < anfangsadresse dann division by zero
  459. 50137 " jmp 42042    ;error-ausgabe
  460. 50140 " ldx    #0
  461. 50142 " lda   139
  462. 50144 " sec
  463. 50145 " sbc  #254
  464. 50147 " sta   139
  465. 50149 " lda   140
  466. 50151 " sbc    #0
  467. 50153 " sta   140    ;differenz durch 254 dividieren (blocklaenge)
  468. 50155 " bcc 50160    ;wenn fertig
  469. 50157 " inx
  470. 50158 " bne 50142    ;weiter dividieren
  471. 50160 " cpx   #79    ;schauen ob das file laenger als 78 bloecke wird
  472. 50162 " bcc 50169
  473. 50164 " ldx   #15    ;wenn ja dann overflow error
  474. 50166 " jmp 42042
  475. 50169 " txa
  476. 50170 " pha          ;blockanzahl retten
  477. 50171 " jsr 47006    ;den anfangsblock vom basic ins x-register holen
  478. 50174 " txa
  479. 50175 " pha          ;und retten
  480. 50176 " jsr   121    ;ein basic-zeichen holen
  481. 50179 " cmp   #93    ;und schauen ob ']'
  482. 50181 " beq 50186
  483. 50183 " jmp 44808    ;wenn nein dann syntax error
  484. 50186 " jsr   115    ;naechstes zeichen holen (vorbereitung fuer den rueck-
  485. 50189 " pla          ;-sprung zum interpreter) anfangsblock wieder holen
  486. 50190 " sta   139    ;und abspeichern
  487. 50192 " pla          ;file-laenge holen
  488. 50193 " clc
  489. 50194 " adc   139    ;anfang dazuaddieren
  490. 50196 " cmp   #79    ;und schauen ob der letzte block > 78 ist
  491. 50198 " bcc 50205
  492. 50200 " ldx   #14    ;wenn ja dann illegal quantity error
  493. 50202 " jmp 42042    ;ausgeben
  494. 50205 " jsr 49803    ;das floppy-programm zum schreiben senden
  495. 50208 " lda    #2
  496. 50210 " ldx 49799
  497. 50213 " tay
  498. 50214 " jsr 65466    ;setlfs
  499. 50217 " lda    #2
  500. 50219 " ldx   #53
  501. 50221 " ldy  #195
  502. 50223 " jsr 65469    ;setnam
  503. 50226 " jsr 65472    ;open (open2,8,2,"#1")
  504. 50229 " bcc 50305    ;wenn kein fehler dann weiter
  505. 50231 " jmp 57593    ;fehler
  506. 50234 " jsr 65484    ;clrchn   unterroutine zum senden von 'b-p 2 0'
  507. 50237 " ldx    #1
  508. 50239 " jsr 65481    ;chkout
  509. 50242 " ldy    #0
  510. 50244 " lda 49792,y  ;'b-p 2 0'
  511. 50247 " jsr 65490    ;senden
  512. 50250 " bcs 50231
  513. 50252 " iny
  514. 50253 " cpy    #7
  515. 50255 " bne 50244
  516. 50257 " jmp 65484    ;clrchn
  517. 50260 " lda   139    ;routine zum senden von spur und sektor('m-w' 254 7 2 x y)
  518. 50262 " lsr          ;block laden
  519. 50263 " lsr          ;und durch 16 teilen
  520. 50264 " lsr
  521. 50265 " lsr
  522. 50266 " clc
  523. 50267 " adc   #36
  524. 50269 " sta 49969    ;+36=aktuelle spur
  525. 50272 " lda   139
  526. 50274 " and   #15
  527. 50276 " sta 49970    ;block and 15 = aktueller sektor
  528. 50279 " jsr 65484    ;clrchn
  529. 50282 " ldx    #1
  530. 50284 " jsr 65481    ;chkout
  531. 50287 " ldy    #0
  532. 50289 " lda 49963,y  ;'m-w' 254 7 2 x y
  533. 50292 " jsr 65490    ;senden
  534. 50295 " bcs 50231
  535. 50297 " iny
  536. 50298 " cpy    #8
  537. 50300 " bne 50289
  538. 50302 " jmp 65484    ;clrchn und ende unterroutine
  539. 50305 " jsr 65484    ;clrchn
  540. 50308 " ldx    #2
  541. 50310 " jsr 65478    ;chkin
  542. 50313 " jsr 65487    ;chrin
  543. 50316 " jsr 65463    ;status
  544. 50319 " beq 50324
  545. 50321 " jmp 42082    ;wenn <>0 dann 'error'
  546. 50324 " jsr 50260    ;aktuellen track und sektor senden
  547. 50327 " jsr 50234    ;'b-p 2 0' senden
  548. 50330 " ldx    #2
  549. 50332 " jsr 65481    ;chrout
  550. 50335 " lda   253
  551. 50337 " sec
  552. 50338 " sbc   251
  553. 50340 " sta   140
  554. 50342 " lda   254
  555. 50344 " sbc   252    ;schauen ob das der letzte bolck des files ist
  556. 50346 " bne 50354    ;wenn nein
  557. 50348 " ldy   140
  558. 50350 " cpy  #254
  559. 50352 " bcc 50399    ;wenn ja
  560. 50354 " lda  #255  ;wenn etwas anderes als 255 gesendet wird so ist das das
  561. 50356 " jsr 65490    ;kennzeichen das der betreffende block der letzte ist.
  562. 50359 " ldy    #0
  563. 50361 " lda  (251),y
  564. 50363 " jsr 65490    ;chrout 254 datenbytes uebertragen
  565. 50366 " bcs 50295
  566. 50368 " iny
  567. 50369 " cpy  #254
  568. 50371 " bne 50361
  569. 50373 " jsr 65484    ;clrchn
  570. 50376 " lda  #222
  571. 50378 " jsr 49975    ;floppy-routine starten
  572. 50381 " nop
  573. 50382 " nop
  574. 50383 " inc   139    ;zeiger auf naechsten block
  575. 50385 " lda   251
  576. 50387 " clc
  577. 50388 " adc  #254
  578. 50390 " sta   251    ;anfangsadresse erhoehen
  579. 50392 " bcc 50396
  580. 50394 " inc   252
  581. 50396 " jmp 50324    ;naechsten block senden
  582. 50399 " iny          ;adresse des letzten gultigen bytes senden
  583. 50400 " tya
  584. 50401 " jsr 65490    ;chrout
  585. 50404 " sty   141    ;adresse retten
  586. 50406 " ldy    #0
  587. 50408 " lda  (251),y
  588. 50410 " jsr 65490    ;chrout gueltigen teil des blockes senden
  589. 50413 " iny
  590. 50414 " cpy   141
  591. 50416 " bne 50408
  592. 50418 " jsr 65484    ;clrchn
  593. 50421 " lda  #222
  594. 50423 " jsr 49975    ;floppy-routine starten
  595. 50426 " jsr 65484    ;clrchn
  596. 50429 " lda    #2
  597. 50431 " jsr 65475    ;close2
  598. 50434 " ldx    #1
  599. 50436 " jsr 65481
  600. 50439 " lda   #73
  601. 50441 " jsr 65490    ;print#1,"i"
  602. 50444 " jsr 65484
  603. 50447 " lda    #1
  604. 50449 " jsr 65475    ;close1
  605. 50452 " jmp 42926    ;retour zur interpreter-schleife
  606. 50455 " cmp  #147    ;schauen ob es der 'load'-code ist
  607. 50457 " beq 50462
  608. 50459 " jmp 50650    ;naechster befehl
  609. 50462 " jsr   115
  610. 50465 " jsr 44426
  611. 50468 " jsr 47095
  612. 50471 " sty   251
  613. 50473 " sta   252    ;anfangsadrese holen
  614. 50475 " jsr 44797
  615. 50478 " jsr 47006    ;anfangsblock holen
  616. 50481 " cpx   #79    ;wenn blocknr. >78
  617. 50483 " bcc 50490
  618. 50485 " ldx   #14    ;dann illegal quantity error ausgeben
  619. 50487 " jmp 42042
  620. 50490 " stx   139    ;anfangsblock retten
  621. 50492 " jsr   121
  622. 50495 " jsr 50703    ;kontrolle auf ']'
  623. 50498 " nop
  624. 50499 " jsr   115
  625. 50502 " jsr 49806    ;floppy-prg. zum lesen senden
  626. 50505 " lda    #2
  627. 50507 " ldx 49799
  628. 50510 " tay
  629. 50511 " jsr 65466    ;setlfs
  630. 50514 " lda    #2
  631. 50516 " ldx   #51
  632. 50518 " ldy  #195
  633. 50520 " jsr 65469    ;setnam
  634. 50523 " jsr 65472    ;open (open2,8,2,"#0")
  635. 50526 " bcc 50531
  636. 50528 " jmp 57593    ;fehler
  637. 50531 " jsr 65484    ;clrchn
  638. 50534 " ldx    #2
  639. 50536 " jsr 65478    ;chkin
  640. 50539 " jsr 65487    ;chrin
  641. 50542 " jsr 65463    ;status
  642. 50545 " beq 50550
  643. 50547 " jmp 42082    ;wenn st <> 0 dann 'error'
  644. 50550 " jsr 50260    ;spur und sektor senden
  645. 50553 " lda  #145
  646. 50555 " jsr 49975    ;block lesen (floppy-routine starten
  647. 50558 " jsr 50234    ;'b-p 2 0' senden
  648. 50561 " ldx    #2
  649. 50563 " jsr 65478    ;chkin
  650. 50566 " jsr 65487    ;chrin
  651. 50569 " sta   141    ;1. byte als anzahl gueltiger bytes +1 retten
  652. 50571 " ldy    #0
  653. 50573 " jsr 65487
  654. 50576 " bcs 50528    ;fehler?
  655. 50578 " sta  (251),y ;alle bytes holen und speichern
  656. 50580 " iny
  657. 50581 " cpy   141    ;schauen ob alle gueltigen bytes
  658. 50583 " bne 50573    ;wenn nein naechstes
  659. 50585 " jsr 65484    ;clrchn
  660. 50588 " lda   141
  661. 50590 " cmp   #255   ;schauen ob alle bytes gueltig waren
  662. 50592 " bne  50618   ;wenn nein dann war es der letzte block
  663. 50594 " lda    251   ;wenn ja
  664. 50596 " clc
  665. 50597 " adc   #254
  666. 50599 " sta    251   ;adresse =adresse+254
  667. 50601 " bcc  50605
  668. 50603 " inc    252
  669. 50605 " inc    139   ;block-zeiger um eins erhoehen
  670. 50607 " lda    139
  671. 50609 " cmp    #79   ;wenn block-zeiger zu hoch (>78)
  672. 50611 " bcc  50550   ;wenn nicht naechsten block holen
  673. 50613 " ldx    #14   ;dann illegal quantity error
  674. 50615 " jmp  42042   ;ausgeben
  675. 50618 " lda     #2
  676. 50620 " jsr  65475   ;close2
  677. 50623 " ldx     #1
  678. 50625 " jsr  65481   ;chkout
  679. 50628 " lda    #73
  680. 50630 " jsr  65490   ;print#1,"i"
  681. 50633 " jsr  65484   ;clrchn
  682. 50636 " lda     #1
  683. 50638 " jsr  65475   ;close1
  684. 50641 " jmp  42926   ;zurueck zur interpreter-schlaufe
  685. 50644 " jsr   121
  686. 50647 " jmp 42983    ;einsprung fuer befehl-abarbeiten
  687. 50650 " cmp  #161    ;schauen ob get
  688. 50652 " beq 50657
  689. 50654 " jmp 50839    ;wenn nicht weiter
  690. 50657 " jsr   115
  691. 50660 " jsr 45195    ;stringzeiger-adresse holen
  692. 50663 " sta    73
  693. 50665 " sty    74    ;und speichern
  694. 50667 " lda  #255    ;laenge
  695. 50669 " jsr 46197    ;platz im string-bereich reservieren
  696. 50672 " ldy    #2
  697. 50674 " lda    97,y  ;neue adresse
  698. 50677 " sta   (73),y ;beim stringzeiger richten
  699. 50679 " pha          ;und retten
  700. 50680 " dey
  701. 50681 " bpl 50674
  702. 50683 " jsr 44797    ;pruefen auf komma
  703. 50686 " jsr 47006    ;block-nr. holen
  704. 50689 " cpx   #79
  705. 50691 " bcc 50698
  706. 50693 " ldx   #14    ;wenn zu gross dann illegal quantity
  707. 50695 " jmp 42042    ;ausgeben
  708. 50698 " stx   139    ;block speichern
  709. 50700 " jmp 50711
  710. 50703 " cmp   #93    ;einschub von einer vorherigen routine
  711. 50705 " beq 50710    ;(pruefen auf ']')
  712. 50707 " jmp 44808    ;syntax-error
  713. 50710 " rts
  714. 50711 " jsr   121
  715. 50714 " jsr 50703    ;pruefen auf ']'
  716. 50717 " jsr   115    ;zaehler auf naechsten befehl richten
  717. 50720 " jsr 49806    ;floppy-routine 'lesen' senden
  718. 50723 " pla          ;zeiger und laenge des neuen strings holen
  719. 50724 " sta   141
  720. 50726 " pla
  721. 50727 " sta   251
  722. 50729 " pla
  723. 50730 " sta   252    ;und speichern
  724. 50732 " lda    #2
  725. 50734 " ldx 49799
  726. 50737 " tay
  727. 50738 " jsr 65466    ;setlfs
  728. 50741 " lda    #2
  729. 50743 " ldx   #51
  730. 50745 " ldy  #195
  731. 50747 " jsr 65469    ;setnam
  732. 50750 " jsr 65472    ;open 2,8,2,"#0"
  733. 50753 " bcc 50758
  734. 50755 " jmp 57593    ;fehler
  735. 50758 " jsr 65484    ;clrchn
  736. 50761 " ldx    #2
  737. 50763 " jsr 65478    ;chkin
  738. 50766 " jsr 65487    ;chrin
  739. 50769 " jsr 65463    ;status
  740. 50772 " beq 50777    ;kontrollieren
  741. 50774 " jmp 42082    ;'error' ausgeben
  742. 50777 " jsr 50260    ;spur + sektor senden
  743. 50780 " lda  #145
  744. 50782 " jsr 49975    ;routine starten
  745. 50785 " jsr 50234    ;b-p 2 0
  746. 50788 " ldx    #2
  747. 50790 " jsr 65478    ;chkin
  748. 50793 " nop
  749. 50794 " nop
  750. 50795 " nop
  751. 50796 " ldy    #0
  752. 50798 " jsr 65487    ;255 bytes holen
  753. 50801 " bcs 50755    ;fehler ?
  754. 50803 " sta  (251),y ;und als string speichern
  755. 50805 " iny
  756. 50806 " cpy   141
  757. 50808 " bne 50798
  758. 50810 " jsr 65484    ;clrchn
  759. 50813 " lda    #2
  760. 50815 " jsr 65475    ;close2
  761. 50818 " ldx    #1
  762. 50820 " jsr 65481    ;chkout
  763. 50823 " lda   #73
  764. 50825 " jsr 65490    ;print#1,"i"
  765. 50828 " jsr 65484    ;clrchn
  766. 50831 " lda    #1
  767. 50833 " jsr 65475    ;close1
  768. 50836 " jmp 42926    ;zum interpreter
  769. 50839 " cmp  #153    ;schauen ob print-code
  770. 50841 " beq 50846
  771. 50843 " jmp 44808    ;wenn nein syntax-error
  772. 50846 " jsr   115
  773. 50849 " jsr 45195    ;adresse des string-zeigers holen
  774. 50852 " pha
  775. 50853 " tya
  776. 50854 " pha          ;und retten
  777. 50855 " jsr 44797    ;komma
  778. 50858 " jsr 47006    ;blocknr. holen
  779. 50861 " cpx   #79
  780. 50863 " bcc 50870    ;pruefen
  781. 50865 " ldx   #14
  782. 50867 " jmp 42042    ;illeg. quantity
  783. 50870 " stx   139    ;und speichern
  784. 50872 " jsr   121
  785. 50875 " jsr 50703    ;pruefen auf ']'
  786. 50878 " jsr   115
  787. 50881 " pla
  788. 50882 " sta    98
  789. 50884 " pla
  790. 50885 " jsr 51008    ;laenge pruefen
  791. 50888 " iny
  792. 50889 " lda   (97),y
  793. 50891 " sta   251
  794. 50893 " iny
  795. 50894 " lda   (97),y ;adresse des eigentlichen strings vom string-zeiger her
  796. 50896 " sta   252    ;holen und speichern
  797. 50898 " jsr 49803    ;'schreiben' senden
  798. 50901 " lda    #2
  799. 50903 " ldx 49799
  800. 50906 " tay
  801. 50907 " jsr 65466
  802. 50910 " lda    #2
  803. 50912 " ldx   #53
  804. 50914 " ldy  #195
  805. 50916 " jsr 65469
  806. 50919 " jsr 65472    ;open2,8,2,"#1"
  807. 50922 " bcc 50927
  808. 50924 " jmp 57593    ;fehler
  809. 50927 " jsr 65484
  810. 50930 " ldx    #2
  811. 50932 " jsr 65478
  812. 50935 " jsr 65487
  813. 50938 " jsr 65463
  814. 50941 " beq 50946
  815. 50943 " jmp 42082
  816. 50946 " jsr 50260    ;spur + sektor senden
  817. 50949 " jsr 50234    ;b-p 2 0 senden
  818. 50952 " ldx    #2
  819. 50954 " jsr 65481    ;chkout
  820. 50957 " ldy    #0
  821. 50959 " lda  (251),y ;255 daten aus dem string lesen
  822. 50961 " jsr 65490    ;und senden
  823. 50964 " bcs 50924
  824. 50966 " iny
  825. 50967 " cpy  #255
  826. 50969 " bne 50959
  827. 50971 " jsr 65484    ;clrchn
  828. 50974 " lda  #222
  829. 50976 " jsr 49975    ;floppy-routine starten
  830. 50979 " jsr 65484
  831. 50982 " lda    #2
  832. 50984 " jsr 65475    ;close2
  833. 50987 " ldx    #1
  834. 50989 " jsr 65481
  835. 50992 " lda   #73
  836. 50994 " jsr 65490    ;print#1,"i"
  837. 50997 " jsr 65484
  838. 51000 " lda    #1
  839. 51002 " jsr 65475    ;close1
  840. 51005 " jmp 42926    ;zum interpret
  841. 51008 " sta    97    ;einschub (laenge bestimmen)
  842. 51010 " ldy    #0
  843. 51012 " lda   (97),y   ;laenge holen
  844. 51014 " cmp  #255
  845. 51016 " beq 51023
  846. 51018 " ldx   #23      ;wenn falsch dann string too long ausgeben
  847. 51020 " jmp 42042
  848. 51023 " rts
  849. 51024 ".en
  850.