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 >
Wrap
Assembly Source File
|
2022-10-26
|
6KB
|
429 lines
E
_ pROGRAM TO LIST LAZY GREENIUS ASSEMBLER PROGRAMS
_ dEFINE A START LOCATION
ORG $1350
_ DEFINE THE STORAGE LOCATIONS USED
LOADADDR = $2000
BSOUT= $FFD2
PO= $FA
LO = $FC
ENRES 2
CTRES 2
CBRES 2
SAVEPORES 2
_ cODE START
_ INPUT IS a=FILENAME LENGTH
_ x=FILENAME ADDRESS LOW
_ y=FILENAME ADDRESS HIGH
_ BANK WILL HAVE BEEN SET BEFORE THIS PROGRAM WAS CALLED
$FFBD_ SET NAME
#0
#0
$FF68_ SET BANK
#0
#8
#0
$FFBA_ SET LFS
#0
#>LOADADDR
#<LOADADDR
$FFD5_ LOAD
ERROR
{CBM-A} EN
{CBM-E} EN+1
DISPLAY
ERROR{CBM-N}_ RETURN ERROR IN a
_
_ nOW WE DISPLAY THE SCREEN
_
DISPLAYEQU *
#147
BSOUT
#1
#>LOADADDR
{CBM-P} PO
{CBM-P} CT
#<LOADADDR
{CBM-P} PO+1
{CBM-P} CT+1
#0
DISPSCREQU *
[PO],Y
#13
NOCHECK
#26
EXITLINE
NOCHECKEQU *
OUTCHAR
PO
NOINC9
PO+1
NOINC9EQU *
PO+1_ ASSUME THAT THERE IS AT LEAST ONE CHARACTER
EN+1_ IN THE FILE AND THAT EN IS THE POSITION
DISPSCR_ AFTER THIS CHARACTER SO PO COULD EQUAL EN
PO_ AT SOME POINT IF WE REACH THE END BEFORE
EN_ BEFORE THE END OF THE SCREEN
DISPSCR
EXITLINEEQU *_ END OF FILE OR LAST cr WOULD MEAN 26TH LINE
PO
#1
{CBM-P} CB
PO+1
#0
{CBM-P} CB+1
_
_ CONTROL THE INPUT
_
LOOPKEYEQU *
#3
LOOPDEL1EQU *
#0
LOOPDEL2EQU *
LOOPDEL2
LOOPDEL1
$D4
#83
SCRDOWN
#84
SCRUP
#7
SHIFT
#41
PRT
#57
LOOPKEY
#0
{CBM-N}
SHIFT $D3
SCRUP
#1
SCRDOWN
LOOPKEY
PRT PRINT
SCRUPEQU *
CB+1_ IF CB < EN THEN SCROLL UP
EN+1
EXTRA3
LOOPKEY
SCROLLUP
EXTRA3 CB
EN
LOOPKEY
SCROLLUP
_
_ DO THE SCROLL DOWN LOGIC
_
SCRDOWNEQU *_ IF CT > LOADADDR THEN CONTINUE
CT+1
#<LOADADDR
LOOPKEY_ IF CT(HIGH) < LOADADDR THEN CT < LOADADDR
POSSIBLE_ IF CT(HIGH) = LOADADDR THEN POSSIBLE
DODOWN_ DEFINITE
POSSIBLE EQU *
#>LOADADDR
CT
LOOPKEY
DODOWNEQU *
#27
BSOUT
#87
BSOUT_ SCROLL THE SCREEN DOWN
#19_ HOME THE CURSOR
BSOUT
_
_ START OF THE LOGIC TO SCAN FOR THE PREVIOUS LINE
_
CT
{CBM-D}
{CBM-Q} #2
{CBM-P} PO
{CBM-P} SAVEPO
CT+1
{CBM-Q} #0
{CBM-P} PO+1_ PO=CT-2 POINT PAST LAST CR
{CBM-P} SAVEPO+1_ SAVE CT-2
#0
LOOPUP1EQU *_ LOCATE THE START OF THE LINE
[PO],Y
#13_ HAVE WE FOUND A cr
FNDUP1_ YES SO STOP
PO_ PO=PO-1
PO
#$FF
NODEC1
PO+1
NODEC1EQU *
PO+1_ IF PO <= LOADADDR THEN STOP
#<LOADADDR
SETSTART
EXTRA1
LOOPUP1
EXTRA1EQU *
PO
#>LOADADDR
LOOPUP1
SETSTART EQU *
#>LOADADDR
{CBM-P} PO
#<LOADADDR
{CBM-P} PO+1
NOINC1
FNDUP1EQU *_ FOUND EITHER THE cr OR START OF TEXT
PO_ POINT TO NEXT CHAR IF cr FOUND
NOINC1_ IF START OF TEXT THEN WE WOULD HAVE GONE
PO+1_ GONE PAST THE START BY 1 SO INCREMENT
_
_ IF PO > CT-2 THEN ALL WE FOUND WAS A CARRIAGE RETURN ON THE LAST LINE
_ SO DON'T DISPLAY ANYTHING
_
NOINC1EQU *
PO
{CBM-P} CT
PO+1
{CBM-P} CT+1_ THIS WILL BE THE NEW CURRENT TOP
SAVEPO+1
PO+1
LEAVE1
EXTRA2
DISP
EXTRA2EQU *
SAVEPO
PO
LEAVE1
DISP EQU *
[PO],Y
OUTCHAR
PO
SAVEPO
INCPO
PO+1
SAVEPO+1
LEAVE1
INCPOEQU *
PO
DISP
PO+1
DISP
_
_ DISPLAYED THE LINE IF >40 THEN WE WOULD HAVE HAD TO SCROLL DOWN TWICE
_
LEAVE1EQU *
_
_ tHIS LOGIC JUST LOOKS FOR THE CURRENT BOTTOM START OF LINE
_
CB
{CBM-D}
{CBM-Q} #2
{CBM-P} PO
CB+1
{CBM-Q} #0
{CBM-P} PO+1_ PO=CT-2 POINT PAST LAST CR
#0
LOOPUP2EQU *_ LOCATE THE START OF THE LINE
[PO],Y
#13
FNDUP2
PO
PO
#$FF
LOOPUP2
PO+1
LOOPUP2
FNDUP2EQU *
PO
NOINC2
PO+1
NOINC2EQU *
PO
{CBM-P} CB
PO+1
{CBM-P} CB+1
LOOPKEY
_
_ HERE IS THE LOGIC TO SCROLL UP.
_
SCROLLUPEQU *
#27
BSOUT
#86
BSOUT_ SCROLL UP
#19
BSOUT_ HOME CURSOR
#24_ 24 CURSOR DOWNS
#17
LOOPCUREQU *
BSOUT
LOOPCUR
_
_ HERE WE GO...
_
CB
{CBM-P} PO
CB+1
{CBM-P} PO+1
#0
LOOPITEQU *
[PO],Y
#13
LEAVE4
OUTCHAR
PO
CHECK2
PO+1
CHECK2EQU *
PO+1
EN+1
LOOPIT
EXTRA4
LEAVE4
EXTRA4EQU *
PO
EN
LOOPIT
LEAVE4EQU *
PO
NOINC4
PO+1
NOINC4EQU *
PO
{CBM-P} CB
PO+1
{CBM-P} CB+1
_
_ LINE NOW DISPLAYED SO LETS LOCATE THE CURRENT TOP
_
CT
{CBM-P} PO
CT+1
{CBM-P} PO+1
LOOP5EQU *
[PO],Y
PO
FORWARD
PO+1
FORWARDEQU *
#13
LOOP5
PO
{CBM-P} CT
PO+1
{CBM-P} CT+1
LOOPKEY
_
_ nOW OUTPUT CHARACTERS AND CONVERT THE TOKENS
_
OUTCHAREQU *
{CBM-A} SAVEX
{CBM-E} SAVEY
#128
CONVERT
BSOUT
EXITCHAREQU *
SAVEX
SAVEY
{CBM-N}
CONVERTEQU *
{CBM-D}
{CBM-Q} #128
{CBM-R}
#>TABLE
{CBM-P} LO
#<TABLE
{CBM-P} LO+1
#0
OUTIT
LOOP9EQU *
LO
#3
{CBM-P} LO
LO+1
#0
{CBM-P} LO+1
LOOP9
OUTITEQU *
#0
LOOP8EQU *
[LO],Y
BSOUT
EXITCHAR
#3
LOOP8
_ SET A GOOD RETURN CODE
EXITCHAR
TABLE EQU *
DB "ADCANDASLBCCBCSBEQBITBMIBNEBPLBRKBVCBVSCLCCLDCLICLVCMPCPXCPY"
DB "DECDEXDEYEORINCINXINYJMPJSRLDALDXLDYLSRNOPORAPHAPHPPLAPLPROL"
DB "RORRTIRTSSBCSECSEDSEISTASTXSTYTAXTAYTSXTXATXSTYA"
SAVEXRES 1
SAVEYRES 1
_
_ ROUTINE TO PRINT FROM LOADADDR TO EN
_
PRINTEQU *
#0_ SET LENGTH TO ZERO
$FFBD
#1
#4
#7
$FFBA_ SET lfs
$FFC0_ OPEN THE FILE
PRTCONT1
PRTERROR1EQU *
LOOPKEY
PRTCONT1EQU *
#1
$FFC9_ bsout ROUTED THE LOGICAL FILE NUMBER DEF
PRTCONT2
PRTERROR2 EQU *
#1
$FFC3_ CLOSE THE la
PRTERROR1
PRTCONT2 EQU *
#>LOADADDR
{CBM-P} PO
#<LOADADDR
{CBM-P} PO+1
#0
LOOPPRTEQU *
PO
EN
INCLOOP
PO+1
EN+1
PRTFIN
INCLOOP EQU *
[PO],Y
OUTCHAR
PRTFIN
$D4
#13_ S KEY PRESSED ?
PRTFIN
PO
LOOPPRT
PO+1
LOOPPRT
PRTFINEQU *
$FFCC_ RESET THE CHANNELS
PRTERROR2_ RESET BSOUT AND CLOSE THE FILE AND EXIT
O