From 678c29acd31513e67ed46d54a961a05cdd449b0d Mon Sep 17 00:00:00 2001 From: Bill Chatfield Date: Wed, 31 Jan 2024 23:49:58 -0500 Subject: [PATCH] Start to convert to S-C assembler syntax --- .gitignore | 1 + more.s => more.S | 225 +++++++++++++++++++++++------------------------ 2 files changed, 110 insertions(+), 116 deletions(-) create mode 100644 .gitignore rename more.s => more.S (70%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1377554 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.swp diff --git a/more.s b/more.S similarity index 70% rename from more.s rename to more.S index c01e8e2..75a07b7 100644 --- a/more.s +++ b/more.S @@ -1,69 +1,65 @@ -pr#1 - -:p - ******************************** * * * MORE - UN*X MORE COMMAND * -* ASSEMBLES WITH MERLIN * +* ASSEMBLES WITH S-C * * * ******************************** - DSK MORE ;WRITE ASSEMBLED FILE TO DISK - TYP $06 ;$FF=SYSTEM, $06=BINARY - ORG $2000 ;ASSEMBLE START ADDRESS - +* DSK MORE ;WRITE ASSEMBLED FILE TO DISK +* TYP $06 ;$FF=SYSTEM, $06=BINARY + .OR $2000 ;ASSEMBLE START ADDRESS +* * SYSTEM VARIABLES - -IN EQU $200 ;256-CHAR INPUT BUF - +* +IN .EQ $200 ;256-CHAR INPUT BUF +* * SUBROUTINES IN MONITOR ROM: $F800 - $FFFF - -RDKEY EQU $FD0C ;READS A CHARACTER -GETLN EQU $FD6A ;READS A LINE, WITH PROMPT($33) -GETLN1 EQU $FD6F ;READS A LINE, NO PROMPT -CROUT EQU $FD8E -COUT EQU $FDED -PRBYTE EQU $FDDA - +* +RDKEY .EQ $FD0C ;READS A CHARACTER +GETLN .EQ $FD6A ;READS A LINE, WITH PROMPT($33) +GETLN1 .EQ $FD6F ;READS A LINE, NO PROMPT +CROUT .EQ $FD8E +COUT .EQ $FDED +PRBYTE .EQ $FDDA +* * SUBROUTINES IN BASIC.SYSTEM ROM: - -GETBUFR EQU $BEF5 ;ALLOCATE BUFFER, DESTROYS X & Y -FREEBUFR EQU $BEF8 ;FREE BUFFER - +* +GETBUFR .EQ $BEF5 ;ALLOCATE BUFFER, DESTROYS X & Y +FREEBUFR .EQ $BEF8 ;FREE BUFFER +* * PRODOS ENTRY POINT - -MLI EQU $BF00 - +* +MLI .EQ $BF00 +* * MEMORY LOCATIONS - -OURCH EQU $057B ;80-COL HORIZ CURSOR POSITION -OURCV EQU $05FB ;VERTICAL CURSOR POSITION - +* +OURCH .EQ $057B ;80-COL HORIZ CURSOR POSITION +OURCV .EQ $05FB ;VERTICAL CURSOR POSITION +* * ZERO-PAGE ADDRESSES - -ZP_A1L EQU $3C ;MONITOR GENERAL PURPOSE -ZP_A1H EQU $3D ;MONITOR GENERAL PURPOSE - +* +ZP.A1L .EQ $3C ;MONITOR GENERAL PURPOSE +ZP.A1H .EQ $3D ;MONITOR GENERAL PURPOSE +* * PRODOS COMMAND CODES - -OPENCMD EQU $C8 -READCMD EQU $CA -CLOSCMD EQU $CC - +* +OPENCMD .EQ $C8 +READCMD .EQ $CA +CLOSCMD .EQ $CC +* * CONSTANTS - -EOFERR EQU $4C ;ERROR CODE FOR END-OF-FILE -PTR EQU $06 ;ONLY FREE 0-PAGE LOCATION -MAXERCDE EQU $5A ;LARGEST ERROR CODE -CR EQU $0D ;ASCII CARRIAGE RETURN -CR_HIBIT EQU $8D ;CARRIAGE RET WITH HIGH BIT SET -BUFSIZE EQU $00FF -SCR_HGHT EQU 24 ;SCREEN HEIGHT - +* +EOFERR .EQ $4C ;ERROR CODE FOR END-OF-FILE +PTR .EQ $06 ;ONLY FREE 0-PAGE LOCATION +MAXERCDE .EQ $5A ;LARGEST ERROR CODE +CR .EQ $0D ;ASCII CARRIAGE RETURN +CR.HIBIT .EQ $8D ;CARRIAGE RET WITH HIGH BIT SET +BUFSIZE .EQ $00FF +SCR.HGHT .EQ 24 ;SCREEN HEIGHT +* * DEBUGGING - -TRACE EQU 0 +* +TRACE .EQ 0 ******************************** * * @@ -72,10 +68,10 @@ TRACE EQU 0 * * ******************************** -PUSHY MAC +PUSHY .MA TYA PHA - <<< + .EM ******************************** * * @@ -84,10 +80,10 @@ PUSHY MAC * * ******************************** -POPY MAC +POPY .MA PLA TAY - <<< + .EM ******************************** * * @@ -99,20 +95,20 @@ POPY MAC * * ******************************** -CPIN MAC +CPIN .MA PUSHY ;SAVE Y STX ]1 ;COPY LENGTH TO FIRST BYTE OF ]1 LDY #0 ;INIT Y TO ZERO -LOOP CPY ]1 ;COMPARE Y WITH LENGTH BYTE - BEQ ENDLOOP ;DONE IF LENGTH IS REACHED +:1 CPY ]1 ;COMPARE Y WITH LENGTH BYTE + BEQ :2 ;DONE IF LENGTH IS REACHED LDA IN,Y ;LOAD IN[Y] INTO ACCUMULATOR CMP #CR ;COMPARE WITH CARRIAGE RETURN - BEQ ENDLOOP ;STOP AT CARRIAGE RETURN + BEQ :2 ;STOP AT CARRIAGE RETURN INY ;DEST STR IS 1 AHEAD OF IN BUF STA ]1,Y ;COPY CHAR TO DEST STR ]1 - JMP LOOP ;LOOP TO NEXT CHAR -ENDLOOP POPY ;RESTORE Y - <<< + JMP :1 ;LOOP TO NEXT CHAR +:2 POPY ;RESTORE Y + .EM ******************************** * * @@ -122,17 +118,17 @@ ENDLOOP POPY ;RESTORE Y * * ******************************** -PUTS MAC +PUTS .MA PUSHY LDY #0 ;INIT LOOP INDEX -LOOP CPY ]1 ;HAS STR LENGTH BEEN REACHED - BEQ ENDLOOP ;IF SO THEN FINISH +:1 CPY ]1 ;HAS STR LENGTH BEEN REACHED + BEQ :2 ;IF SO THEN FINISH INY ;MOVE TO INDEX OF NEXT CHAR LDA ]1,Y ;GET THE CHAR TO BE WRITTEN JSR COUT ;WRITE THE CHARACTER - JMP LOOP ;LOOP -ENDLOOP POPY - <<< + JMP :1 ;LOOP +:2 POPY + .EM ******************************** * * @@ -142,20 +138,20 @@ ENDLOOP POPY * * ******************************** -SET1 MAC +SET1 .MA LDA #1 STA ]1 - <<< + .EM -SET0 MAC +SET0 .MA LDA #0 STA ]1 - <<< + .EM -SET23 MAC +SET23 .MA LDA #23 STA ]1 - <<< + .EM ******************************** * * @@ -171,14 +167,14 @@ MAIN CLD ;CLEAR DECIMAL FLG, AVOID CRASH PUTS PROMPT JSR GETLN1 ;LENGTH IN X, CR AT END CPX #0 ;IS THE LENGTH ZERO? - BEQ :END ;USER JUST PRESSED RETURN + BEQ END ;USER JUST PRESSED RETURN CPIN FILENAME ;COPY "IN" BUF TO FILENAME * * GET FILE I/O BUFFER FOR OPEN CALL * LDA #4 ;FOUR 256 BYTE PAGES = 1KB JSR GETBUFR ;GET BUF FROM BASIC.SYSTEM - BCS :ERRFWDR ;CARRY SET INDICATES AN ERROR + BCS ERRFWDR ;CARRY SET INDICATES AN ERROR STA OBUFADDR+1 ;GETBUFR RETURNS HIBYTE IN A LDA #0 ;PREPARE STA OBUFADDR ;LOBYTE IS 0 B/C ADDR OF PAGE @@ -188,7 +184,7 @@ MAIN CLD ;CLEAR DECIMAL FLG, AVOID CRASH JSR MLI DB OPENCMD DA OPENPRMS - BNE :ERRFWDR + BNE ERRFWDR * * COPY FILE NUMBER FROM OPEN PARAMETERS TO READ AND CLOSE * @@ -200,12 +196,12 @@ MAIN CLD ;CLEAR DECIMAL FLG, AVOID CRASH * LDA #1 ;ONE 256 BYTE BUFFER JSR GETBUFR ;CALL BASIC.SYSTEM SUB - BCS :ERRFWDR ;CARRY SET MEANS ERROR + BCS ERRFWDR ;CARRY SET MEANS ERROR STA RBADDR+1 ;STORE HI-BYTE - STA ZP_A1H ;AGAIN, FOR 0-PAGE INDIRECTION + STA ZP.A1H ;AGAIN, FOR 0-PAGE INDIRECTION LDA #0 ;0 FOR LO-BYTE STA RBADDR ;STORE IT - STA ZP_A1L ;AGAIN, FOR 0-PAGE INDIRECTION + STA ZP.A1L ;AGAIN, FOR 0-PAGE INDIRECTION * * PRINT THE FILE * @@ -230,17 +226,17 @@ MAIN CLD ;CLEAR DECIMAL FLG, AVOID CRASH * LDA READERR ;RELOAD THE READ RESULT CODE CMP EOFERR ;WAS IT AN EOF "ERROR" - BEQ :END ;EOF IS NOT REALLY AN ERROR + BEQ END ;EOF IS NOT REALLY AN ERROR CMP #0 - BNE :ERRFWDR + BNE ERRFWDR LDA CLOSERR - BNE :ERRFWDR - JMP :END + BNE ERRFWDR + JMP END * * FINISH * -:ERRFWDR JSR ERRPROC -:END NOP +ERRFWDR JSR ERRPROC +END NOP RTS ******************************** @@ -255,17 +251,17 @@ VIEWFILE FIN SET1 LINENUM ;INIT LINE NUMBER -:LOOP JSR MLI ;CALL PRODOS TO READ FILE +.1 JSR MLI ;CALL PRODOS TO READ FILE DB READCMD ;SPECIFY PRODOS READ COMMAND DA READPRMS ;READ PARAMETERS STA READERR ;SAVE RESULT OF READ OPERATION - BNE :ENDLOOP ;IF ERROR THEN END SUB + BNE .2 ;IF ERROR THEN END SUB JSR WRITEBUF ;WRITE TO SCREEN WHAT WAS READ LDA #1 ;PREPARE FOR NEXT OP CMP USRQUIT ;IF USER WANTS TO QUIT, THEN - BEQ :ENDLOOP ;EXIT THE LOOP - JMP :LOOP ;ELSE, GET THE NEXT BUFFER -:ENDLOOP NOP + BEQ .2 ;EXIT THE LOOP + JMP .1 ;ELSE, GET THE NEXT BUFFER +.2 NOP RTS ******************************** @@ -277,8 +273,8 @@ VIEWFILE WRITEBUF PUSHY LDY #0 ;INIT CHAR COUNTER VARIABLE -:LOOP CPY READCNT ;COMPARE TO MAX CHARS - BEQ :ENDLOOP +.1 CPY READCNT ;COMPARE TO MAX CHARS + BEQ .3 LDA (ZP_A1L),Y ;GET CHAR FROM BUFFER ORA #%10000000 ;TURN ON HIGH BIT FOR PRINTING JSR COUT ;COUT PRESERVES ACCUM @@ -286,22 +282,21 @@ WRITEBUF * CHECK END OF LINE * CMP #CR_HIBIT ;COMPARE TO CARRIAGE RETURN - BNE :CONT ;IF NOT END OF LINE, NEXT CHAR + BNE .2 ;IF NOT END OF LINE, NEXT CHAR INC LINENUM ;NEXT LINE HAS BEEN REACHED * * CHECK AT END OF PAGE * LDA LINENUM CMP #SCR_HGHT ;AT BOTTOM OF SCREEN? - BNE :CONT ;NO? THEN NEXT CHAR + BNE .2 ;NO? THEN NEXT CHAR JSR STATBAR ;YES? THEN SHOW THE STATUS BAR LDA #1 ;SETUP FOR NEXT LINE CMP USRQUIT ;DID USER ASK TO QUIT - BEQ :ENDLOOP ;YES? THEN END SUB -:CONT INY ;STATBAR HAS ADJUSTED LINENUM - JMP :LOOP -:ENDLOOP NOP - POPY + BEQ .3 ;YES? THEN END SUB +.2 INY ;STATBAR HAS ADJUSTED LINENUM + JMP .1 +.3 POPY DO TRACE PUTS EXVIEW @@ -339,19 +334,19 @@ STATBAR PUSHY PUTS BAR -:LOOP JSR RDKEY ;GET A KEY FROM THE USER +.1 JSR RDKEY ;GET A KEY FROM THE USER CMP #" " ;CHECK IF SPACE ENTERED - BNE :CHKCR ;IF NOT FORWARD TO NEXT CHECK + BNE .2 ;IF NOT FORWARD TO NEXT CHECK SET1 LINENUM ;ADVANCE ONE PAGE, STORE 1 - JMP :ENDLOOP ;PROCESSED SPACE SO DONE -:CHKCR CMP #CR_HIBIT ;CHECK FOR CARRIAGE RETURN - BNE :CHKQUIT + JMP .4 ;PROCESSED SPACE SO DONE +.2 CMP #CR_HIBIT ;CHECK FOR CARRIAGE RETURN + BNE .3 SET23 LINENUM - JMP :ENDLOOP -:CHKQUIT CMP #"Q" ;USER WANTS TO QUIT - BNE :LOOP ;NO RECOGNIZED INPUT + JMP .4 +.3 CMP #"Q" ;USER WANTS TO QUIT + BNE .1 ;NO RECOGNIZED INPUT SET1 USRQUIT -:ENDLOOP JSR ERASEBAR +.4 JSR ERASEBAR POPY DO TRACE @@ -374,13 +369,13 @@ ERASEBAR PUSHY SET0 OURCH ;RESET CURSOR TO BEG OF LINE LDY #0 ;INIT COUNTER FOR SPACES -:LOOP CPY BAR ;FIRST BYTE IS LENGTH - BEQ :ENDLOOP ;IF Y=LEN THEN DONE +.1 CPY BAR ;FIRST BYTE IS LENGTH + BEQ .2 ;IF Y=LEN THEN DONE LDA #" " ;LOAD SPACE JSR COUT ;WRITE TO SCREEN INY ;MAKE PROGRESS - JMP :LOOP ;LOOP TO NEXT CHAR -:ENDLOOP SET0 OURCH ;RESET CURSON TO BEG OF LINE + JMP .1 ;LOOP TO NEXT CHAR +.2 SET0 OURCH ;RESET CURSON TO BEG OF LINE POPY DO TRACE @@ -453,9 +448,7 @@ CLOSFNUM DS 1 * BUFFERS * * CONSUME ALL BYTES UP TO THE NEXT PAGE BOUNDRY -FILLER DS \,$00 +*FILLER DS \,$00 * MUST START ON PAGE BOUNDRY *OPENBUF DS 1024 *READBUF DS BUFSIZE - -: \ No newline at end of file