home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disk User Volume 4 #3 / Commodore_Disk_User_Vol.4_3_1991_-.d64 / display.asm < prev    next >
Assembly Source File  |  2022-10-26  |  6KB  |  429 lines

  1. E
  2. _ pROGRAM TO LIST LAZY GREENIUS ASSEMBLER PROGRAMS
  3.  
  4. _ dEFINE A START LOCATION
  5.  
  6. ORG $1350
  7.  
  8. _ DEFINE THE STORAGE LOCATIONS USED
  9.  
  10. LOADADDR = $2000
  11. BSOUT= $FFD2
  12. PO= $FA
  13. LO        = $FC
  14. ENRES 2
  15. CTRES 2
  16. CBRES 2 
  17. SAVEPORES 2
  18.  
  19. _ cODE START
  20. _ INPUT IS a=FILENAME LENGTH
  21. _          x=FILENAME ADDRESS LOW
  22. _          y=FILENAME ADDRESS HIGH
  23. _ BANK WILL HAVE BEEN SET BEFORE THIS PROGRAM WAS CALLED
  24.  
  25.  $FFBD_ SET NAME
  26.  #0
  27.  #0
  28.  $FF68_ SET BANK
  29.  #0
  30.  #8
  31.  #0
  32.  $FFBA_ SET LFS
  33.  #0
  34.  #>LOADADDR
  35.  #<LOADADDR
  36.  $FFD5_ LOAD 
  37.  ERROR
  38. {CBM-A} EN
  39. {CBM-E} EN+1
  40.  DISPLAY
  41. ERROR{CBM-N}_ RETURN ERROR IN a
  42.  
  43. _
  44. _ nOW WE DISPLAY THE SCREEN
  45. _
  46. DISPLAYEQU *
  47.  #147
  48.  BSOUT
  49.  #1
  50.  #>LOADADDR
  51. {CBM-P} PO
  52. {CBM-P} CT
  53.  #<LOADADDR
  54. {CBM-P} PO+1
  55. {CBM-P} CT+1
  56.  #0
  57. DISPSCREQU *
  58.  [PO],Y
  59.  #13
  60.  NOCHECK
  61.  
  62.  #26
  63.  EXITLINE
  64. NOCHECKEQU *
  65.  OUTCHAR
  66.  PO
  67.  NOINC9
  68.  PO+1
  69. NOINC9EQU *
  70.  PO+1_ ASSUME THAT THERE IS AT LEAST ONE CHARACTER
  71.  EN+1_ IN THE FILE AND THAT EN IS THE POSITION 
  72.  DISPSCR_ AFTER THIS CHARACTER SO PO COULD EQUAL EN
  73.  PO_ AT SOME POINT IF WE REACH THE END BEFORE
  74.  EN_ BEFORE THE END OF THE SCREEN
  75.  DISPSCR
  76. EXITLINEEQU *_ END OF FILE OR LAST cr WOULD MEAN 26TH LINE          
  77.  PO
  78.  
  79.  #1
  80. {CBM-P} CB
  81.  PO+1
  82.  #0
  83. {CBM-P} CB+1
  84. _
  85. _ CONTROL THE INPUT
  86. _
  87. LOOPKEYEQU *
  88.  #3
  89. LOOPDEL1EQU *
  90.  #0
  91. LOOPDEL2EQU *
  92.  
  93.  LOOPDEL2
  94.  
  95.  LOOPDEL1
  96.  $D4
  97.  #83
  98.  SCRDOWN
  99.  #84
  100.  SCRUP
  101.  #7
  102.  SHIFT
  103.  #41
  104.  PRT
  105.  #57
  106.  LOOPKEY
  107.  #0
  108. {CBM-N}
  109. SHIFT $D3
  110.  SCRUP
  111.  #1
  112.  SCRDOWN
  113.  LOOPKEY
  114. PRT PRINT
  115. SCRUPEQU *
  116.  CB+1_ IF CB < EN THEN SCROLL UP
  117.  EN+1
  118.  EXTRA3
  119.  LOOPKEY
  120.  SCROLLUP
  121. EXTRA3 CB
  122.  EN
  123.  LOOPKEY
  124.  SCROLLUP
  125. _
  126. _ DO THE SCROLL DOWN LOGIC
  127. SCRDOWNEQU *_ IF CT > LOADADDR THEN CONTINUE
  128.  CT+1
  129.  #<LOADADDR
  130.  LOOPKEY_ IF CT(HIGH) < LOADADDR THEN CT < LOADADDR
  131.  POSSIBLE_ IF CT(HIGH) = LOADADDR THEN POSSIBLE
  132.  DODOWN_ DEFINITE
  133. POSSIBLE  EQU *
  134.  #>LOADADDR
  135.  CT
  136.  LOOPKEY
  137. DODOWNEQU *
  138.  #27
  139.  BSOUT
  140.  #87
  141.  BSOUT_ SCROLL THE SCREEN DOWN
  142.  #19_ HOME THE CURSOR
  143.  BSOUT
  144. _
  145. _ START OF THE LOGIC TO SCAN FOR THE PREVIOUS LINE
  146. _
  147.  CT
  148. {CBM-D}
  149. {CBM-Q} #2
  150. {CBM-P} PO
  151. {CBM-P} SAVEPO
  152.  CT+1
  153. {CBM-Q} #0
  154. {CBM-P} PO+1_ PO=CT-2 POINT PAST LAST CR
  155. {CBM-P} SAVEPO+1_ SAVE CT-2
  156.  #0
  157. LOOPUP1EQU *_ LOCATE THE START OF THE LINE
  158.  [PO],Y
  159.  #13_ HAVE WE FOUND A cr
  160.  FNDUP1_ YES SO STOP
  161.  PO_ PO=PO-1
  162.  PO
  163.  #$FF
  164.  NODEC1
  165.  PO+1
  166. NODEC1EQU *
  167.  PO+1_ IF PO <= LOADADDR THEN STOP 
  168.  #<LOADADDR
  169.  SETSTART
  170.  EXTRA1
  171.  LOOPUP1
  172. EXTRA1EQU *
  173.  PO
  174.  #>LOADADDR
  175.  LOOPUP1
  176. SETSTART  EQU *
  177.  #>LOADADDR
  178. {CBM-P} PO
  179.  #<LOADADDR
  180. {CBM-P} PO+1
  181.  NOINC1
  182.  
  183. FNDUP1EQU *_ FOUND EITHER THE cr OR START OF TEXT
  184.  PO_ POINT TO NEXT CHAR IF cr FOUND
  185.  NOINC1_ IF START OF TEXT THEN WE WOULD HAVE GONE
  186.  PO+1_ GONE PAST THE START BY 1 SO INCREMENT
  187. _
  188. _ IF PO > CT-2 THEN ALL WE FOUND WAS A CARRIAGE RETURN ON THE  LAST LINE
  189. _ SO DON'T DISPLAY ANYTHING
  190. _
  191. NOINC1EQU *
  192.  PO
  193. {CBM-P} CT
  194.  PO+1
  195. {CBM-P} CT+1_ THIS WILL BE THE NEW CURRENT TOP
  196.  SAVEPO+1
  197.  PO+1
  198.  LEAVE1
  199.  EXTRA2
  200.  DISP
  201. EXTRA2EQU *
  202.  SAVEPO
  203.  PO
  204.  LEAVE1
  205. DISP EQU *
  206.  [PO],Y
  207.  OUTCHAR
  208.  PO
  209.  SAVEPO
  210.  INCPO
  211.  PO+1
  212.  SAVEPO+1
  213.  LEAVE1
  214. INCPOEQU *
  215.  PO
  216.  DISP
  217.  PO+1
  218.  DISP
  219. _
  220. _ DISPLAYED THE LINE IF >40 THEN WE WOULD HAVE HAD TO SCROLL DOWN TWICE
  221. _
  222. LEAVE1EQU *
  223. _
  224. _ tHIS LOGIC JUST LOOKS FOR THE CURRENT BOTTOM START OF LINE
  225. _
  226.  CB
  227. {CBM-D}
  228. {CBM-Q} #2
  229. {CBM-P} PO
  230.  CB+1
  231. {CBM-Q} #0
  232. {CBM-P} PO+1_ PO=CT-2 POINT PAST LAST CR
  233.  #0
  234. LOOPUP2EQU *_ LOCATE THE START OF THE LINE
  235.  [PO],Y
  236.  #13
  237.  FNDUP2
  238.  PO
  239.  PO
  240.  #$FF
  241.  LOOPUP2
  242.  PO+1
  243.  LOOPUP2
  244. FNDUP2EQU *
  245.  PO
  246.  NOINC2
  247.  PO+1
  248. NOINC2EQU *
  249.  PO
  250. {CBM-P} CB
  251.  PO+1
  252. {CBM-P} CB+1
  253.  LOOPKEY
  254.  
  255. _
  256. _ HERE IS THE LOGIC TO SCROLL UP.
  257. _
  258. SCROLLUPEQU *
  259.  #27
  260.  BSOUT
  261.  #86
  262.  BSOUT_ SCROLL UP
  263.  #19
  264.  BSOUT_ HOME CURSOR
  265.  #24_ 24 CURSOR DOWNS
  266.  #17
  267. LOOPCUREQU *
  268.  BSOUT
  269.  
  270.  LOOPCUR
  271. _
  272. _ HERE WE GO...
  273.  CB
  274. {CBM-P} PO
  275.  CB+1
  276. {CBM-P} PO+1
  277.  #0
  278. LOOPITEQU *
  279.  [PO],Y
  280.  #13
  281.  LEAVE4
  282.  OUTCHAR
  283.  PO
  284.  CHECK2
  285.  PO+1
  286. CHECK2EQU *
  287.  PO+1
  288.  EN+1
  289.  LOOPIT
  290.  EXTRA4
  291.  LEAVE4
  292. EXTRA4EQU *
  293.  PO
  294.  EN
  295.  LOOPIT
  296. LEAVE4EQU *
  297.  PO
  298.  NOINC4
  299.  PO+1
  300. NOINC4EQU *
  301.  PO
  302. {CBM-P} CB
  303.  PO+1
  304. {CBM-P} CB+1
  305. _
  306. _ LINE NOW DISPLAYED SO LETS LOCATE THE CURRENT TOP
  307. _
  308.  CT
  309. {CBM-P} PO
  310.  CT+1
  311. {CBM-P} PO+1
  312. LOOP5EQU *
  313.  [PO],Y
  314.  PO
  315.  FORWARD
  316.  PO+1
  317. FORWARDEQU *
  318.  #13
  319.  LOOP5
  320.  PO
  321. {CBM-P} CT
  322.  PO+1
  323. {CBM-P} CT+1
  324.  LOOPKEY
  325. _
  326. _ nOW OUTPUT CHARACTERS AND CONVERT THE TOKENS
  327. _
  328. OUTCHAREQU *
  329. {CBM-A} SAVEX
  330. {CBM-E} SAVEY
  331.  #128
  332.  CONVERT
  333.  BSOUT
  334. EXITCHAREQU *
  335.  SAVEX
  336.  SAVEY
  337. {CBM-N}
  338. CONVERTEQU *
  339. {CBM-D}
  340. {CBM-Q} #128
  341. {CBM-R}
  342.  #>TABLE
  343. {CBM-P} LO
  344.  #<TABLE
  345. {CBM-P} LO+1
  346.  #0
  347.  OUTIT
  348. LOOP9EQU *
  349.  LO
  350.  
  351.  #3
  352. {CBM-P} LO
  353.  LO+1
  354.  #0
  355. {CBM-P} LO+1
  356.  
  357.  LOOP9
  358. OUTITEQU *
  359.  #0
  360. LOOP8EQU *
  361.  [LO],Y
  362.  BSOUT
  363.  EXITCHAR
  364.  
  365.  #3
  366.  LOOP8
  367.           _ SET A GOOD RETURN CODE
  368.  EXITCHAR
  369. TABLE EQU *
  370. DB  "ADCANDASLBCCBCSBEQBITBMIBNEBPLBRKBVCBVSCLCCLDCLICLVCMPCPXCPY"
  371. DB  "DECDEXDEYEORINCINXINYJMPJSRLDALDXLDYLSRNOPORAPHAPHPPLAPLPROL"
  372. DB  "RORRTIRTSSBCSECSEDSEISTASTXSTYTAXTAYTSXTXATXSTYA"
  373. SAVEXRES 1
  374. SAVEYRES 1
  375.  
  376. _
  377. _ ROUTINE TO PRINT FROM LOADADDR TO EN
  378. _
  379. PRINTEQU *
  380.  #0_ SET LENGTH TO ZERO
  381.  $FFBD
  382.  #1
  383.  #4
  384.  #7
  385.  $FFBA_ SET lfs
  386.  $FFC0_ OPEN THE FILE
  387.  PRTCONT1
  388. PRTERROR1EQU *
  389.  LOOPKEY
  390. PRTCONT1EQU *
  391.  #1
  392.  $FFC9_ bsout ROUTED THE LOGICAL FILE NUMBER DEF
  393.  PRTCONT2
  394. PRTERROR2 EQU *
  395.  #1
  396.  $FFC3_ CLOSE THE la
  397.  PRTERROR1
  398. PRTCONT2  EQU *
  399.  #>LOADADDR
  400. {CBM-P} PO
  401.  #<LOADADDR
  402. {CBM-P} PO+1
  403.  #0
  404. LOOPPRTEQU *
  405.  PO
  406.  EN
  407.  INCLOOP
  408.  PO+1
  409.  EN+1
  410.  PRTFIN
  411. INCLOOP   EQU *
  412.  [PO],Y
  413.  OUTCHAR
  414.  PRTFIN
  415.  $D4
  416.  #13_ S KEY PRESSED ?
  417.  PRTFIN
  418.  PO
  419.  LOOPPRT
  420.  PO+1
  421.  LOOPPRT
  422. PRTFINEQU *
  423.  $FFCC_ RESET THE CHANNELS
  424.  PRTERROR2_ RESET BSOUT AND CLOSE THE FILE AND EXIT
  425.  
  426.  
  427. O