Created
April 14, 2021 08:19
-
-
Save vintagechips/fd33131ba7f56ea29f7da5806f3e85b3 to your computer and use it in GitHub Desktop.
Micro monitor for MCS8085 with assembler/disassembler.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ; uMON85 SBC8085 MICRO MONITOR | |
| ; | |
| ; DEFAULT VALUE | |
| LINSIZ EQU 26 ; SIZE OF LINE BUFFER | |
| TXIM EQU 040H ; SIM INITIAL VALUE | |
| ; | |
| ; RESET VECTOR | |
| ORG 0000H | |
| RESET: LXI SP,STKBTM ; STACK SETUP | |
| JMP MAIN ; GO MAIN | |
| ; | |
| ORG 0008H | |
| GETCH: JMP GETCH0 | |
| ; | |
| ORG 000CH | |
| GETS: JMP GETS0 | |
| ; | |
| ORG 0010H | |
| PUTCH: JMP PUTCH0 | |
| ; | |
| ORG 0014H | |
| PUTS: JMP PUTS0 | |
| ; | |
| ORG 0018H | |
| PUTSPC: MVI A,' ' | |
| RST PUTCH/8 | |
| RET | |
| ; | |
| ORG 001CH | |
| PUTB: JMP PUTB0 | |
| ; | |
| ; DELAY | |
| ; D*14+25 CLKS | |
| DELAY: DCR D ; COUNT DOWN(4CLOCKS) | |
| JNZ DELAY ; IF NOT 0, REPEAT(10/7) | |
| RET ; RETURN(10)+CALL(18) | |
| ; | |
| ; GET CHARACTER | |
| ; RESULT A=CHARACTER | |
| GETCH0: PUSH B ; SAVE BC(12) | |
| PUSH D ; SAVE DE(12) | |
| GCST1: RIM ; READ SID(4) | |
| ANI 80H ; MASK ALL BUT SID(7) | |
| JZ GCST1 ; CHECK MARK(7) | |
| GCST2: RIM ; READ SID(4) | |
| ANI 80H ; MASK EXCEPT SID(7) | |
| JNZ GCST2 ; WAIT FOR START(18) | |
| ; | |
| ; START 1.5BIT=469 CLKS | |
| MVI D,29 ; DELAY CONSTANT(7/TOTAL25) | |
| CALL DELAY ; DELAY(431/456) | |
| MVI C,8 ; INITIAL BIT LENGS(7/463) | |
| MVI E,0 ; INITIAL RECEIVE CHAR(7/470) | |
| ; | |
| ; RECEIVE 1BIT=312.5 CLKS | |
| GCST3: RIM ; READ SID(4) | |
| ANI 80H ; MASK ALL BUT SID(7/11) | |
| MOV B,A ; TRANSMIT SID(4/15) | |
| MOV A,E ; RESTORE CHAR IN RECEIVE(4/19) | |
| RRC ; ROTATE RIGHT(4/23) | |
| ORA B ; EMBED SID IN BIT7(4/27) | |
| MOV E,A ; SAVE CHAR IN RECEIVE(4/30) | |
| ; | |
| MVI D,16 ; DELAY CONSTANT(7/37) | |
| CALL DELAY ; DELAY(249/286) | |
| NOP ; DELAY(4/290) | |
| NOP ; DELAY(4/294) | |
| NOP ; DELAY(4/298) | |
| DCR C ; DECREMENT BIT LENGS(4/302) | |
| JNZ GCST3 ; REPEAT WHILE BIT LENGS!=0(10/7/312) | |
| ; | |
| ; STOP 1.5BIT=469 CLKS | |
| MVI D,26 ; DELAY CONSTANT(7/14) | |
| CALL DELAY ; DELAY(389/403) | |
| MOV A,E ; RESTORE CHAR IN RECEIVE(4/407) | |
| POP D ; RESTORE DE(10/417) | |
| POP B ; RESTORE BC(10/427) | |
| RET ; RETURN(10/437+45) | |
| ; | |
| ; PUT CHARACTER | |
| ; A=CHARACTER | |
| PUTCH0: PUSH PSW ; SAVE AF | |
| PUSH B ; SAVE BC | |
| PUSH D ; SAVE DE | |
| MOV B,A ; SAVE CHAR IN TRANSMIT | |
| MVI A,TXIM OR 80H ; SET MARK | |
| SIM ; TRANSMIT IT | |
| MVI C,8 ; INITIAL BIT LENGS | |
| ; | |
| ; START 1BIT=312.5 CLKS | |
| MVI A,TXIM ; START | |
| SIM ; SEND (4) | |
| MVI D,17 ; DELAY CONSTANT(7/11) | |
| CALL DELAY ; DELAY(263/274) | |
| ; | |
| ; DATA 1BIT=312.5 CLKS | |
| PCST1: MOV A,B ; RESTORE CHAR IN SEND (4/278) | |
| RRC ; BIT0->BIT7(4/282) | |
| MOV B,A ; SAVE CHAR(4/286) | |
| ANI 80H ; MASK ALL BUT BIT7(7/293) | |
| ORI TXIM ; COMBINE SIM(7/300) | |
| NOP ; DELAY(4/304) | |
| NOP ; DELAY(4/308) | |
| NOP ; DELAY(4/312) | |
| SIM ; SEND(4) | |
| MVI D,16 ; DELAY CONSTANT(7/11) | |
| CALL DELAY ; DELAY(249/260) | |
| DCR C ; COUNT BIT LENGTH(4/264) | |
| JNZ PCST1 ; REPEAT UNTIL BIT LENGTH0(10/7/274) | |
| ; | |
| JMP $+3 ; DELAY(10/284) | |
| JMP $+3 ; DELAY(10/294) | |
| NOP ; DELAY(4/298) | |
| MVI A,TXIM OR 80H ;SET MARK(4/312) | |
| ; | |
| ; STOP 1BIT=312.5 CLKS | |
| SIM ; SEND IT(4) | |
| MVI D,19 ; DELAY CONSTANT(7/11) | |
| CALL DELAY ; DELAY(291/302) | |
| JMP $+3 ; DELAY(10/312) | |
| ; | |
| POP D ; RESTORE DE | |
| POP B ; RESTORE BC | |
| POP PSW ; RESTORE AF | |
| RET | |
| ; | |
| ; MAIN ROUTINE | |
| MAIN: LXI SP,LBUF ; STACK SETUP | |
| MVI A,TXIM OR 80H ; SET MARK | |
| SIM ; PUT IT | |
| ; | |
| ; OPENNING MESSAGE | |
| LXI H,HELLO ; SET MESSAGE | |
| CALL PUTM ; OUT IT | |
| ; | |
| ; FILL IN RAM WITH 0 | |
| LXI H,0FF00H ; START ADDRESS | |
| INIRAM: MVI M,0 ; SET 0 | |
| INR L ; NEXT ADDRESS | |
| JNZ INIRAM ; IF NO, THEN REPEAT | |
| ; | |
| ;LXI H,0FF00H ; INITIAL START ADDRESS | |
| UPDADR: SHLD ADRSS ; SET IT | |
| ; | |
| ; DISPLAY PROMPT | |
| LOOP: MVI A,'[' ; SET [ | |
| RST PUTCH/8 ; OUT IT | |
| CALL PUTA ; OUT START ADDRESS | |
| MVI A,']' ; SET ] | |
| RST PUTCH/8 ; OUT IT | |
| ; | |
| CALL GETS ; GET COMMAND LINE TO BUFFER | |
| LXI D,LBUF ; SET DE TO BUFFER TOP | |
| LDAX D ; GET CHAR | |
| CPI ' ' ; SPACE? | |
| JZ ERRCM ; THEN ERROR | |
| ORA A ; EMPTY? | |
| JZ LOOP ; THEN RETRY | |
| ; | |
| ; O COMMAND | |
| COMO: CPI 'O' ; O? | |
| JNZ COMG ; IF NOT, NEXT COMMAND | |
| CALL GETA1 ; 第1引数取得 | |
| ; | |
| JMP UPDADR ; UPDATE START ADDRES | |
| ; | |
| ; G COMMAND | |
| COMG: CPI 'G' ; G? | |
| JNZ COMD ; Gでなければ次のコマンドを検査 | |
| CALL GETA1 ; 第1引数取得 | |
| ; | |
| LXI D,LOOP ; 戻りアドレスをDへ転送 | |
| PUSH D ; Dをスタックへ積む | |
| PCHL ; ADRSSへ分岐 | |
| ; | |
| ; D COMMAND | |
| COMD: CPI 'D' ; D? | |
| JNZ COML ; Dでなければ次のコマンドを検査 | |
| ; | |
| ; CASE NO PARAMETERS | |
| LHLD ADRSS ; 開始アドレスを取得(念のため) | |
| INX D ; NEXT CHAR | |
| LDAX D ; GET CHAR | |
| CPI 0 ; NO PARAMETERS? | |
| JZ CDST1 ; IF YES, GO CDST1 | |
| ; | |
| CALL GETA11 ; 第1引数取得 | |
| ; | |
| CDST1: MOV A,L ; 開始アドレスを16個区切りに変換1 | |
| ANI 0F0H ; 開始アドレスを16個区切りに変換2 | |
| MOV L,A ; 開始アドレスを16個区切りに変換3 | |
| SHLD ADRSS ; ADRSSを更新 | |
| SHLD ADRSE ; ADRSSを更新 | |
| CALL GETA2 ; 第2引数があれば第2引数取得 | |
| ; | |
| ; DUMP | |
| CDST2: CALL INDENT ; インデントを表示 | |
| MVI B,16 | |
| CDST21: MVI A,'+' ; '+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F ' | |
| RST PUTCH/8 | |
| MVI A,16 | |
| SUB B | |
| CALL PUTB1 | |
| RST PUTSPC/8 | |
| DCR B | |
| JNZ CDST21 | |
| LXI H,ASCII ; 'ASCII'を | |
| CALL PUTM ; 表示 | |
| ; | |
| CDST3: RST PUTSPC/8 | |
| CALL PUTA ; 先頭アドレス | |
| PUSH H | |
| RST PUTSPC/8 | |
| ; | |
| MVI B,16 | |
| CDST9: MOV A,M | |
| CALL PUTB | |
| RST PUTSPC/8 | |
| INX H | |
| DCR B | |
| JNZ CDST9 | |
| ; | |
| POP H | |
| MVI B,16 | |
| CDST4: MOV A,M | |
| SUI ' ' ; 印字不可能文字を.に置換1 | |
| CPI '~'-' '+1 ; 印字不可能文字を.に置換2 | |
| JC CDST6 ; 印字不可能文字を.に置換3 | |
| MVI A,'.'-' '; 印字不可能文字を.に置換4 | |
| CDST6: ADI ' ' ; 印字不可能文字を.に置換5 | |
| RST PUTCH/8 | |
| INX H | |
| DCR B | |
| JNZ CDST4 | |
| SHLD ADRSS | |
| PUSH H | |
| CALL PUTCRLF | |
| LHLD ADRSE | |
| XCHG | |
| POP H | |
| ; | |
| CALL CPDH | |
| JC LOOP | |
| MOV A,L | |
| ORA H | |
| JZ LOOP | |
| JMP CDST3 | |
| ; | |
| ; L COMMAND | |
| COML: CPI 'L' ; L? | |
| JNZ COMS ; Lでなければ次のコマンドを検査 | |
| ; | |
| ; CASE NO PARAMETERS | |
| LHLD ADRSS ; 開始アドレスを取得(念のため) | |
| INX D ; NEXT CHAR | |
| LDAX D ; GET CHAR | |
| CPI 0 ; NO PARAMETERS? | |
| JZ CLST1 ; IF YES, GO CLST1 | |
| ; | |
| CALL GETA11 ; 第1引数取得 | |
| ; | |
| CLST1: SHLD ADRSS ; ADRSSを更新 | |
| SHLD ADRSE | |
| CALL GETA2 ; 第2引数があれば第2引数取得 | |
| ; | |
| ; DIS ASSEMBLE | |
| CLST2: CALL DASM | |
| ; | |
| LHLD ADRSE ; DE | |
| XCHG | |
| LHLD ADRSS ; HL | |
| CALL CPDH | |
| JC LOOP | |
| MOV A,L | |
| ORA H | |
| JZ LOOP | |
| JMP CLST2 | |
| ; | |
| ; S COMMAND | |
| COMS: CPI 'S' ; S? | |
| JNZ ASMG1 ; Sでなければ次のコマンドを検査 | |
| INX D ; 次の文字へ進む | |
| LDAX D ; 次の文字をAに転送 | |
| CPI ' ' ; 空白? | |
| JNZ ASMG1 ; 空白でなければASMG1へ進む | |
| CSST8: INX D ; 次の文字へ進む | |
| LDAX D ; GET CHAR | |
| ; | |
| CSST1: ORA A ; 行末? | |
| JZ LOOP ; 行末なら終了 | |
| LHLD ADRSS ; 書き込みアドレスを設定 | |
| ; | |
| ; STRING | |
| CPI 39 ; '? | |
| JNZ CSST4 ; IF NOT, GO HEX | |
| CSST3: INX D ; 次の文字へ進める | |
| LDAX D ; 文字をAに取得 | |
| CPI 39 ; '? | |
| JZ CSST2 ; 'ならこの処理を終了 | |
| ORA A ; 終端? | |
| JZ ERRCM ; 終端ならエラー処理 | |
| MOV M,A ; HLの位置に文字を保存 | |
| INX H ; 書き込み位置を進める | |
| SHLD ADRSS ; 開始位置を更新 | |
| JMP CSST3 ; この処理を継続 | |
| CSST2: INX D ; 'の後ろへ進める | |
| LDAX D | |
| CSST7: CPI ',' ; 区切り? | |
| JZ CSST8 ; 区切りなら繰り返す | |
| JMP LOOP ; 区切りでなければ終了 | |
| ; | |
| ; HEX | |
| CSST4: CALL GETW ; GET WORD | |
| MOV A,L ; 16進数をAに転送 | |
| LHLD ADRSS ; 書き込み位置をHLに復帰 | |
| MOV M,A ; 書き込み位置に16進数を保存 | |
| INX H ; 書き込み位置を進める | |
| SHLD ADRSS ; 書き込み位置を更新 | |
| LDAX D | |
| ORA A | |
| JZ LOOP | |
| CPI ',' | |
| JZ CSST8 | |
| JMP ERRCM | |
| ; | |
| ; 第1引数取得 | |
| GETA1: INX D ; NEXT CHAR | |
| GETA11: LDAX D ; GET CHAR | |
| CPI ' ' ; SPACE? | |
| JNZ GETA10 ; IF NOT, GO ASSEMBLER | |
| ; | |
| INX D ; NEXT CHAR | |
| JMP GETW ; GET WORD | |
| GETA10: POP PSW | |
| JMP ASMG1 ; GO ASSEMBLER | |
| ; | |
| ; 第2引数取得 | |
| GETA2: LDAX D ; 区切り文字を取得 | |
| CPI ',' ; 第2引数がある? | |
| RNZ ; 第2引数がなければ復帰 | |
| INX D ; 次の文字へ進む | |
| CALL GETW ; 引数の値をHLに取得 | |
| SHLD ADRSE ; ADRSEを更新 | |
| ; | |
| XCHG | |
| LHLD ADRSS | |
| CALL CPDH | |
| RNC | |
| LXI D,LBUF+2 | |
| JMP ERRCM | |
| ; | |
| ; ASSEMBLE GROUP1 OPCODE ONLY | |
| ASMG1: LXI H,G1TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG2 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| MOV A,M ; GET CODE | |
| ; | |
| ; SAVE SINGLE CODE IN A | |
| SVSC: LHLD ADRSS ; GET START ADDRES | |
| MOV M,A ; SAVE CODE | |
| INX H ; POINT NEXT ADDRESS | |
| JMP UPDADR ; UPDATE START ADDRES | |
| ; | |
| ; ASSEMBLE GROUP2 RST N | |
| ASMG2: LXI H,G2TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG3 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| LDAX D | |
| SUI '0' | |
| CPI 8 | |
| JNC ERRCM ; ERROR | |
| ; | |
| A2ST1: RLC ; MOVE POSITION STEP1 | |
| RLC ; MOVE POSITION STEP2 | |
| RLC ; MOVE POSITION STEP3 | |
| ORA B ; MAKE CODE | |
| JMP SVSC ; SAVE SINGLE CODE | |
| ; | |
| ; ASSEMBLE GROUP3 OPCODE IMM8 | |
| ASMG3: LXI H,G3TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG4 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| SVIMM8: CALL GETW ; GET IMM16 | |
| MOV C,L ; SET IMM8 | |
| ; | |
| ; SAVE 2 CODE IN BC | |
| SV2C LHLD ADRSS ; GET START ADDRES | |
| MOV M,B ; SAVE CODE | |
| INX H ; POINT NEXT ADDRESS | |
| MOV M,C ; SAVE IMM8 | |
| INX H ; POINT NEXT ADDRESS | |
| JMP UPDADR ; UPDATE START ADDRES | |
| ; | |
| ; ASSEMBLE GROUP4 OPCODE IMM16 | |
| ASMG4: LXI H,G4TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG5 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| SVW3C: CALL GETW ; GET IMM16 | |
| XCHG ; SET IMM16 TO DE | |
| ; | |
| ; SAVE 3 CODE IN BC | |
| SV3C LHLD ADRSS ; GET START ADDRES | |
| MOV M,B ; SAVE CODE | |
| INX H ; POINT NEXT ADDRESS | |
| MOV M,E ; SAVE IMM16 LOW | |
| INX H ; POINT NEXT ADDRESS | |
| MOV M,D ; SAVE IMM16 HIGH | |
| INX H ; POINT NEXT ADDRESS | |
| JMP UPDADR ; UPDATE START ADDRES | |
| ; | |
| ; ASSEMBLE GROUP5 OPCODE R(DDD) | |
| ASMG5: LXI H,G5TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG6 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| LDAX D ; GET REGISTER NAME | |
| CALL GETR ; CONVERT TO REGISTER NUMBER | |
| JMP A2ST1 | |
| ; | |
| ; ASSEMBLE GROUP6 OPCODE R(SSS) | |
| ASMG6: LXI H,G6TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG7 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| SVSSS: LDAX D ; GET REGISTER NAME | |
| CALL GETR ; CONVERT TO REGISTER NUMBER | |
| ORA B ; MAKE CODE | |
| JMP SVSC ; SAVE SINGLE CODE | |
| ; | |
| ; GROUP7 OPCODE R(DDD),R(SSS) | |
| ASMG7: LXI H,G7TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG8 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| LDAX D ; GET REGISTER NAME | |
| CALL GETR ; CONVERT TO REGISTER NUMBER | |
| RLC ; MOVE POSITION STEP1 | |
| RLC ; MOVE POSITION STEP2 | |
| RLC ; MOVE POSITION STEP3 | |
| ORA B ; MAKE CODE | |
| MOV B,A ; SET IT TO B | |
| ; | |
| INX D ; POINT REGISTER NAME | |
| LDAX D ; GET REGISTER NAME | |
| CPI ',' ; COMMA? | |
| JNZ ERRCM ; IF NOT, ERROR | |
| ; | |
| INX D | |
| JMP SVSSS | |
| ; | |
| ; GROUP8 OPCODE R,IMM8 | |
| ASMG8: LXI H,G8TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMG9 ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| LDAX D ; GET REGISTER NAME | |
| CALL GETR ; CONVERT TO REGISTER NUMBER | |
| RLC ; MOVE POSITION STEP1 | |
| RLC ; MOVE POSITION STEP2 | |
| RLC ; MOVE POSITION STEP3 | |
| ORA B ; MAKE CODE | |
| MOV B,A ; SET IT TO B | |
| ; | |
| INX D ; POINT REGISTER NAME | |
| LDAX D ; GET REGISTER NAME | |
| CPI ',' ; COMMA? | |
| JNZ ERRCM ; IF NOT, ERROR | |
| INX D | |
| JMP SVIMM8 ; GET IMM8 AND SAVE 2 CODE IN BC | |
| ; | |
| ; GROUP9 OPCODE RP,IMM16 | |
| ASMG9: LXI H,G9TBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMGA ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| CALL GETRP ; CONVERT TO REGISTER PAIR NUMBER | |
| RLC ; MOVE POSITION STEP1 | |
| RLC ; MOVE POSITION STEP2 | |
| RLC ; MOVE POSITION STEP3 | |
| RLC ; MOVE POSITION STEP4 | |
| ORA B ; MAKE CODE | |
| MOV B,A ; SET IT TO B | |
| ; | |
| LDAX D ; GET CHAR | |
| CPI ',' ; COMMA? | |
| JNZ ERRCM ; IF NOT, ERROR | |
| ; | |
| INX D | |
| JMP SVW3C | |
| ; | |
| ; OPCODE RP | |
| ASMGA: LXI H,GATBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMGB ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| CALL GETRP ; CONVERT TO REGISTER PAIR NUMBER | |
| SVRP: RLC ; MOVE POSITION STEP1 | |
| JMP A2ST1 | |
| ; | |
| ; OPCODE RP(B OR D) | |
| ASMGB: LXI H,GBTBL ; SET GROUP TABLE POINTER | |
| CALL MSRCH ; SEARCH MNEMONIC | |
| JNC ASMNG ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| CALL CHKSPC | |
| ; | |
| CALL GETRP ; CONVERT TO REGISTER PAIR NUMBER | |
| ; | |
| CPI 2 ; ONLY B OR D | |
| JNC ERRCM ; IF NOT, ERROR | |
| JMP SVRP ; GET RP AND SAVE SINGLE CODE | |
| ; | |
| ; UNKNOWN COMMANE OR MNEMONIC | |
| ASMNG: LXI D,LBUF ; POINT COMMAND LINE | |
| JMP ERRCM ; ERROR | |
| ; | |
| ; PUT STRING | |
| ; HL= *STRING | |
| PUTS0: MOV A,M ; 文字を拾う | |
| ORA A ; もし0なら | |
| RZ ; 終了 | |
| RST PUTCH/8 ; 文字を送信 | |
| INX H ; 次の文字を指す | |
| JMP PUTS0 ; 繰り返す | |
| ; | |
| ; GET STRING | |
| ; BROKEN A,DE,HL | |
| GETS0: LXI H,LBUF ; HLをバッファ内書き込み位置に設定 | |
| ; | |
| GSST5: RST GETCH/8 ; Aに文字を入れる | |
| CPI 13 ; CR? | |
| JZ GSST1 ; 一致なら終了処理へ分岐 | |
| ; | |
| ; BSなら1文字削除 | |
| CPI 8 ; BS? | |
| JNZ GSST4 ; 不一致なら次の処理へ | |
| MOV A,L ; 書き込み位置を | |
| CPI LBUF AND 0FFH ; バッファの先頭と比較 | |
| JZ GSST5 ; 文字がなければ1文字削除しない | |
| MVI A,8 ; BSで | |
| RST PUTCH/8 ; カーソルを戻す | |
| RST PUTSPC/8 ; 空白で文字を消す | |
| MVI A,8 ; BSで | |
| RST PUTCH/8 ; カーソルを戻す | |
| DCX H ; 書き込み位置を戻す | |
| JMP GSST5 ; 繰り返す | |
| ; | |
| GSST4: MOV D,A ; Aの文字を退避 | |
| MOV A,L ; 書き込み位置を | |
| CPI LBUF+LINSIZ-1 AND 0FFH ; バッファの末尾-1と比較 | |
| JNC GSST5 ; 書き込めなければ繰り返す | |
| ; | |
| ; TABを空白に変換 | |
| MOV A,D ; 文字をAへ復帰 | |
| CPI 9 ; TAB? | |
| JNZ GSST3 ; 不一致なら次の処理へ | |
| MVI A,' ' ; 空白に変換 | |
| ; | |
| ; 印字不可能文字をはじく | |
| GSST3: SUI ' ' ; 印字可能文字の下限を差し引く | |
| CPI '~'-' '+1 ; 印字可能範囲と比較 | |
| JNC GSST5 ; 超えていたら繰り返す | |
| MOV A,D ; 文字をAへ復帰 | |
| ; | |
| ; 小文字を大文字に変換 | |
| SUI 'a' ; aを差し引く | |
| CPI 'z'-'a'+1 ; 小文字の範囲と比較 | |
| MOV A,D ; 文字をAへ復帰 | |
| JNC GSST6 ; 小文字でなければ次の処理へ | |
| ANI 0DFH ; 大文字に変換 | |
| ; | |
| ; 入力した文字を保存 | |
| GSST6: MOV M,A ; バッファに文字を保存 | |
| INX H ; 書き込み位置を進める | |
| RST PUTCH/8 ; エコーバック | |
| JMP GSST5 ; 繰り返す | |
| ; | |
| GSST1:; INX H ; 行末を指す | |
| MVI M,0 ; 行末記号を保存 | |
| JMP PUTCRLF ; 改行を出力 | |
| ; | |
| ; GET REGISTOR NUMBER | |
| ; A=REGISTER NAME | |
| ; A=REGISTER NUMBER | |
| GETR: LXI H,RNAME | |
| CALL FINDC | |
| RC | |
| JMP ERRCM ; 見つからなければエラー処理 | |
| ; | |
| FINDC: PUSH B | |
| MOV B,A | |
| MOV C,L | |
| FINDC0: MOV A,M | |
| CMP B | |
| JZ FINDC1 | |
| INX H | |
| ORA A | |
| JNZ FINDC0 | |
| MOV A,B | |
| POP B | |
| RET | |
| FINDC1: MOV A,L | |
| SUB C | |
| STC | |
| POP B | |
| RET | |
| ; | |
| ; GET WORD | |
| ; DE=HEX STRING | |
| ; HL=WORD,A=TERM | |
| GETW: LXI H,0 | |
| MOV C,E ; DEの下位アドレスをCに保存 | |
| SXST3: LDAX D ; DEが指す文字をAに転送 | |
| SUI '0' ; 数値に変換 | |
| CPI 9+1 ; 9? | |
| JC SXST2 ; 9以下なら次の処理へ進む | |
| SUI 'A'-'0' ; 数値に変換 | |
| CPI 15-9 ; F以上? | |
| JNC GWST2 ; F以上なら戻る | |
| ADI 10 | |
| SXST2: DAD H | |
| DAD H | |
| DAD H | |
| DAD H | |
| ORA L | |
| MOV L,A | |
| INX D ; DEを進める | |
| JMP SXST3 ; 繰り返す | |
| ; | |
| GWST2: MOV A,E ; DEの下位アドレスをAに転送 | |
| SUB C ; 文字数を計算 | |
| JZ ERRCM ; 文字数0ならエラー処理 | |
| ; | |
| LDAX D ; 区切り文字をAに転送 | |
| RET | |
| ; | |
| ; DE=RP STRING | |
| ; A=RP NUMBER,DE=LAST CHAR | |
| GETRP: LDAX D | |
| INX D | |
| LXI H,RPNAME | |
| CALL FINDC | |
| RC | |
| DCX D | |
| LXI H,RPSP | |
| CALL STRCMP | |
| JZ GRPS0 | |
| LXI H,RPPSW | |
| CALL STRCMP | |
| JNZ ERRCM | |
| GRPS0: MVI A,3 | |
| RET | |
| ; | |
| STRCMP: MOV C,E | |
| STRCMP0:LDAX D | |
| INX D | |
| XRA M | |
| INX H | |
| JZ STRCMP0 | |
| ANI 7FH | |
| RZ | |
| MOV E,C | |
| RET | |
| ; | |
| ; COMMAND LINE ERROR | |
| ERRCM: LXI H,ERROR ; ERROR-を | |
| CALL PUTM ; 表示 | |
| LXI H,LBUF ; コマンドラインを | |
| CALL PUTS ; 表示 | |
| CALL PUTCRLF ; 改行を表示 | |
| CALL INDENT ; インデントを表示 | |
| ; | |
| MOV A,E | |
| SUI LBUF AND 0FFH | |
| CNZ PUTSPN | |
| MVI A,'^' | |
| RST PUTCH/8 | |
| CALL PUTCRLF | |
| LXI SP,STKBTM ; スタック設定 | |
| JMP LOOP | |
| ; | |
| INDENT: MVI A,6 | |
| PUTSPN: MOV B,A | |
| PUTSPN0:RST PUTSPC/8 | |
| DCR B | |
| JNZ PUTSPN0 | |
| RET | |
| ; | |
| ; COMMON ROUTINE TO PERFORM UNSIGNED COMPARE | |
| ; CARRY SET IF DE < HL | |
| ; 破壊されるレジスタ-A | |
| CPDH: MOV A,D | |
| CMP H | |
| RNZ | |
| MOV A,E | |
| CMP L | |
| RET | |
| ; | |
| ; PUT START ADDRESS | |
| PUTA: LHLD ADRSS ; GET START ADDRESS | |
| ; | |
| ; PUT WORD | |
| ; HL=WORD | |
| PUTW: MOV A,H ; 上位バイトをAに転送 | |
| CALL PUTB ; 16進数1桁めを表示 | |
| MOV A,L ; 下位バイトをAに転送 | |
| ; | |
| ; PUT BYTE | |
| ; A=BYTE | |
| PUTB0: PUSH PSW ; 16進数を退避 | |
| RRC ; 16進数1桁めへ変換 | |
| RRC ; 16進数1桁めへ変換 | |
| RRC ; 16進数1桁めへ変換 | |
| RRC ; 16進数1桁めへ変換 | |
| CALL PUTB1 ; 16進数1桁めを文字に変換して表示 | |
| POP PSW ; 16進数を復帰 | |
| PUTB1: ANI 0FH ; ゴミを除去 | |
| CPI 10 ; 10? | |
| CMC | |
| ACI '0' ; 0~9 ⇒ 30H~39H, 10~15 ⇒ 3BH~40H | |
| DAA ; 3BH~40H ⇒ 41H~46H | |
| JMP PUTCH ; 16進数1桁めを表示 | |
| ; | |
| ; SEARCH MNEMONIC GROUP TABLE | |
| ; HL=VECTOR TABLE | |
| ; A=0(NOT FOUND IN THIS GROUP),DE=TERM,HL=VECTOR(IF FOUND) | |
| MSRCH: LXI D,LBUF ; POINT MNEMONIC IN BUFFER | |
| ; | |
| ; COMPARE 1 MNEMONIC | |
| MCST1: LDAX D ; GET CHAR | |
| INX D ; POINT NEXT CHAR | |
| XRA M ; SAME? | |
| INX H ; POINT NEXT CHAR | |
| JZ MCST1 ; THEN SKIP FOLLOW | |
| ; | |
| ; CASE NOT SAME | |
| ANI 7FH | |
| JNZ MSST1 | |
| ; | |
| ; COMPLETE DONE? | |
| LDAX D ; GET CHAR | |
| CPI ' ' ; SPACE? | |
| JZ STCRET ; SURE THEN RETURN(Z) | |
| CPI ',' ; COMMA? | |
| JZ STCRET ; SURE THEN RETURN(Z) | |
| ORA A ; TERM? | |
| JZ STCRET ; SURE RETURN(Z) | |
| MSST1: DCX H | |
| MSST2: MOV A,M | |
| INX H | |
| ORA A | |
| JP MSST2 | |
| INX H | |
| MOV A,M | |
| ORA A | |
| JNZ MSRCH | |
| RET | |
| ; | |
| CHKSPC: CPI ' ' ; SPACE? | |
| JNZ ERRCM ; IF NOT, ERROR | |
| INX D ; POINT OPERAND | |
| MOV B,M ; GET CODE | |
| RET | |
| ; | |
| ; PUT CRLF | |
| PUTCRLF:LXI H,CRLF | |
| ; | |
| ; PUT MNEMONIC | |
| ; HL= MNEMONIC ADDRESS | |
| PUTM: MOV A,M ; GET CHAR | |
| ANI 7FH ; CONVERT CAPITAL | |
| RST PUTCH/8 ; PUT IT | |
| MOV A,M ; GET CHAR | |
| INX H ; NEXT CHAR | |
| ORA A ; SEPARATOR? | |
| JP PUTM ; IF NOT, REPEAT | |
| RET | |
| ; | |
| ; PUT REGISTER NAME2 | |
| ; B(..RRR...)=REGISTER NUMBER | |
| PUTR2: MOV A,B | |
| RRC | |
| RRC | |
| RRC | |
| ; | |
| ; PUT REGISTER NAME | |
| ; A(.....RRR)=REGISTER NUMBER | |
| PUTR: LXI H,RNAME ; GET TOP | |
| ANI 07H | |
| PRST3: ADD L | |
| MOV L,A | |
| JNC PRST4 | |
| INR H | |
| PRST4: MOV A,M | |
| JMP PUTCH | |
| ; | |
| ; PUT RP NAME | |
| ; B(..RP....)=RP NUMBER | |
| PUTRP: RST PUTSPC/8 ; OUT SPACE | |
| MOV A,B | |
| RRC | |
| RRC | |
| RRC | |
| RRC | |
| ANI 03H | |
| CPI 3 ; IRREGULAR? | |
| JNC PRST1 ; IF YES, PUT SP | |
| PRST2: LXI H,RPNAME ; GET TOP | |
| JMP PRST3 | |
| ; | |
| PRST1: LXI H,RPSP | |
| JMP PUTM | |
| ; | |
| ; SEARCH CODE IN GROUP TABLE | |
| ; HL=VECTOR TABLE,B=CODE | |
| ; A=FF(NOT FOUND IN THIS GROUP),A=CODE(FOUND) | |
| ; BROKEN HL | |
| CSRCH: MOV C,M ; GET VECTOR | |
| CSRCH0: INX H | |
| MOV A,M ; GET VECTOR | |
| ORA A ; TERM? | |
| RZ ; IF YES, RETURN | |
| ; | |
| SHLD SVPTR ; SAVE MNEMONIQ ADDRESS | |
| CSRCH1: MOV A,M | |
| INX H | |
| ORA A | |
| JP CSRCH1 | |
| MOV A,B ; GET CODE | |
| ANA C | |
| CMP M ; SAME? | |
| JNZ CSRCH0 | |
| ; | |
| LHLD SVPTR ; LOAD MNEMONIQ ADDRESS | |
| CALL PUTM | |
| STCRET: STC | |
| RET | |
| ; | |
| ; DIS ASSEMBLER | |
| DASM: RST PUTSPC/8 ; OUT SPACE | |
| CALL PUTW ; OUT START ADDRESS | |
| RST PUTSPC/8 ; OUT SPACE | |
| ; | |
| MOV B,M ; GET CODE(FIRST, USE HL) | |
| XCHG ; SET START ADDRESS TO DE | |
| ; | |
| G1GP: LXI H,G1TBL-1 ; CODE ONRY | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G2GP ; NOT FOUND? THEN NEXT GROUP | |
| JC DAST1 ; NO OPERAND | |
| ; | |
| G2GP: LXI H,G2TBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G3GP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; NUMBER | |
| RST PUTSPC/8 ; OUT SPACE | |
| MOV A,B | |
| RRC | |
| RRC | |
| RRC | |
| ANI 07H | |
| ADI '0' | |
| RST PUTCH/8 | |
| JMP DAST1 | |
| ; | |
| G3GP: LXI H,G3TBL-1 ; CODE+IMM8 | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G4GP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; IMM8 | |
| RST PUTSPC/8 ; OUT SPACE | |
| INX D | |
| LDAX D | |
| CPB: CALL PUTB | |
| JMP DAST1 | |
| ; | |
| G4GP: LXI H,G4TBL-1 ; CODE+IMM16 | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G5GP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; IMM16 | |
| RST PUTSPC/8 ; OUT SPACE | |
| SIMM16: INX D | |
| LDAX D | |
| MOV L,A | |
| INX D | |
| LDAX D | |
| MOV H,A | |
| CALL PUTW | |
| JMP DAST1 | |
| ; | |
| G5GP: LXI H,G5TBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G6GP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; REGISTER NAME(DDD) | |
| RST PUTSPC/8 ; OUT SPACE | |
| CALL PUTR2 | |
| JMP DAST1 | |
| ; | |
| G6GP: LXI H,G6TBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G7GP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; REGISTER NAME(SSS) | |
| RST PUTSPC/8 ; OUT SPACE | |
| G6GP0: MOV A,B | |
| CALL PUTR | |
| JMP DAST1 | |
| ; | |
| G7GP: LXI H,G7TBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G8GP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; REGISTER NAME(DDD,SSS) | |
| RST PUTSPC/8 ; OUT SPACE | |
| ; | |
| CALL PUTR2 | |
| ; | |
| MVI A,',' ; SET COMMA | |
| RST PUTCH/8 ; OUT IT | |
| JMP G6GP0 | |
| ; | |
| G8GP: LXI H,G8TBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC G9GP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; REGISTER NAME(DDD),IMM8 | |
| RST PUTSPC/8 ; OUT SPACE | |
| CALL PUTR2 | |
| ; | |
| MVI A,',' ; SET COMMA | |
| RST PUTCH/8 ; OUT IT | |
| INX D | |
| LDAX D | |
| JMP CPB | |
| ; | |
| G9GP: LXI H,G9TBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC GAGP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; REGISTER PAIR NAME(RP),IMM16 | |
| CALL PUTRP | |
| ; | |
| MVI A,',' ; SET COMMA | |
| RST PUTCH/8 ; OUT IT | |
| JMP SIMM16 | |
| ; | |
| GAGP: LXI H,GATBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC GBGP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; REGISTER PAIR NAME(RP) | |
| ; | |
| MOV A,B | |
| ANI 0C0H | |
| JZ GAS1 | |
| MOV A,B | |
| CPI 0F0H ; IRREGULAR? | |
| JC GAS1 | |
| RST PUTSPC/8 ; OUT SPACE | |
| LXI H,RPPSW | |
| CALL PUTM | |
| JMP DAST1 | |
| ; | |
| GBGP: LXI H,GBTBL-1 ; CODE WITH NUMBER | |
| CALL CSRCH ; SEARCH CODE | |
| JNC GNGP ; NOT FOUND? THEN NEXT GROUP | |
| ; | |
| ; REGISTER PAIR NAME(RP) | |
| GAS1: CALL PUTRP | |
| JMP DAST1 | |
| ; | |
| GNGP: MVI A,'?' | |
| RST PUTCH/8 | |
| ; | |
| DAST1: INX D | |
| XCHG | |
| SHLD ADRSS | |
| JMP PUTCRLF | |
| ; | |
| ; MESSAGE | |
| HELLO DB 0DH,0AH,'MICRO MONITOR V2.0 FN FOR MCS8085',0DH,0AH | |
| CRLF DB 0DH,8AH | |
| ERROR DB 'ERROR',('-'+80H) AND 0FFH | |
| ASCII: DB 'ASCII',0DH,8AH | |
| ; | |
| ; GROUP VECTOR TABLE | |
| DB 0FFH | |
| G1TBL DB 'NO',('P'+80H) AND 0FFH,00H | |
| DB 'RL',('C'+80H) AND 0FFH,07H | |
| DB 'RR',('C'+80H) AND 0FFH,0FH | |
| DB 'RA',('L'+80H) AND 0FFH,17H | |
| DB 'RA',('R'+80H) AND 0FFH,1FH | |
| DB 'DA',('A'+80H) AND 0FFH,27H | |
| DB 'CM',('A'+80H) AND 0FFH,2FH | |
| DB 'ST',('C'+80H) AND 0FFH,37H | |
| DB 'CM',('C'+80H) AND 0FFH,3FH | |
| DB 'HL',('T'+80H) AND 0FFH,76H | |
| DB 'RN',('Z'+80H) AND 0FFH,0C0H | |
| DB 'R',('Z'+80H) AND 0FFH,0C8H | |
| DB 'RE',('T'+80H) AND 0FFH,0C9H | |
| DB 'RN',('C'+80H) AND 0FFH,0D0H | |
| DB 'R',('C'+80H) AND 0FFH,0D8H | |
| DB 'RP',('O'+80H) AND 0FFH,0E0H | |
| DB 'RP',('E'+80H) AND 0FFH,0E8H | |
| DB 'R',('P'+80H) AND 0FFH,0F0H | |
| DB 'R',('M'+80H) AND 0FFH,0F8H | |
| DB 'XTH',('L'+80H) AND 0FFH,0E3H | |
| DB 'PCH',('L'+80H) AND 0FFH,0E9H | |
| DB 'XCH',('G'+80H) AND 0FFH,0EBH | |
| DB 'SPH',('L'+80H) AND 0FFH,0F9H | |
| DB 'D',('I'+80H) AND 0FFH,0F3H | |
| DB 'E',('I'+80H) AND 0FFH,0FBH | |
| DB 'RI',('M'+80H) AND 0FFH,20H | |
| DB 'SI',('M'+80H) AND 0FFH,30H | |
| DB 0 | |
| ; | |
| DB 0C7H | |
| G2TBL DB 'RS',('T'+80H) AND 0FFH,0C7H | |
| DB 0 | |
| ; | |
| DB 0FFH | |
| G3TBL DB 'I',('N'+80H) AND 0FFH,0DBH | |
| DB 'OU',('T'+80H) AND 0FFH,0D3H | |
| DB 'AD',('I'+80H) AND 0FFH,0C6H | |
| DB 'AC',('I'+80H) AND 0FFH,0CEH | |
| DB 'SU',('I'+80H) AND 0FFH,0D6H | |
| DB 'SB',('I'+80H) AND 0FFH,0DEH | |
| DB 'AN',('I'+80H) AND 0FFH,0E6H | |
| DB 'XR',('I'+80H) AND 0FFH,0EEH | |
| DB 'OR',('I'+80H) AND 0FFH,0F6H | |
| DB 'CP',('I'+80H) AND 0FFH,0FEH | |
| DB 0 | |
| ; | |
| DB 0FFH | |
| G4TBL DB 'SHL',('D'+80H) AND 0FFH,22H | |
| DB 'LHL',('D'+80H) AND 0FFH,2AH | |
| DB 'ST',('A'+80H) AND 0FFH,32H | |
| DB 'LD',('A'+80H) AND 0FFH,3AH | |
| DB 'JN',('Z'+80H) AND 0FFH,0C2H | |
| DB 'JM',('P'+80H) AND 0FFH,0C3H | |
| DB 'CN',('Z'+80H) AND 0FFH,0C4H | |
| DB 'J',('Z'+80H) AND 0FFH,0CAH | |
| DB 'C',('Z'+80H) AND 0FFH,0CCH | |
| DB 'CAL',('L'+80H) AND 0FFH,0CDH | |
| DB 'JN',('C'+80H) AND 0FFH,0D2H | |
| DB 'CN',('C'+80H) AND 0FFH,0D4H | |
| DB 'J',('C'+80H) AND 0FFH,0DAH | |
| DB 'C',('C'+80H) AND 0FFH,0DCH | |
| DB 'JP',('O'+80H) AND 0FFH,0E2H | |
| DB 'CP',('O'+80H) AND 0FFH,0E4H | |
| DB 'JP',('E'+80H) AND 0FFH,0EAH | |
| DB 'CP',('E'+80H) AND 0FFH,0ECH | |
| DB 'J',('P'+80H) AND 0FFH,0F2H | |
| DB 'C',('P'+80H) AND 0FFH,0F4H | |
| DB 'J',('M'+80H) AND 0FFH,0FAH | |
| DB 'C',('M'+80H) AND 0FFH,0FCH | |
| DB 0 | |
| ; | |
| DB 0C7H | |
| G5TBL DB 'IN',('R'+80H) AND 0FFH,04H | |
| DB 'DC',('R'+80H) AND 0FFH,05H | |
| DB 0 | |
| ; | |
| DB 0F8H | |
| G6TBL DB 'AD',('D'+80H) AND 0FFH,80H | |
| DB 'AD',('C'+80H) AND 0FFH,88H | |
| DB 'SU',('B'+80H) AND 0FFH,90H | |
| DB 'SB',('B'+80H) AND 0FFH,98H | |
| DB 'AN',('A'+80H) AND 0FFH,0A0H | |
| DB 'XR',('A'+80H) AND 0FFH,0A8H | |
| DB 'OR',('A'+80H) AND 0FFH,0B0H | |
| DB 'CM',('P'+80H) AND 0FFH,0B8H | |
| DB 0 | |
| ; | |
| DB 0C0H | |
| G7TBL DB 'MO',('V'+80H) AND 0FFH,40H | |
| DB 0 | |
| ; | |
| DB 0C7H | |
| G8TBL DB 'MV',('I'+80H) AND 0FFH,06H | |
| DB 0 | |
| ; | |
| DB 0CFH | |
| G9TBL DB 'LX',('I'+80H) AND 0FFH,01H | |
| DB 0 | |
| ; | |
| DB 0CFH | |
| GATBL DB 'IN',('X'+80H) AND 0FFH,03H | |
| DB 'DA',('D'+80H) AND 0FFH,09H | |
| DB 'DC',('X'+80H) AND 0FFH,0BH | |
| DB 'PO',('P'+80H) AND 0FFH,0C1H | |
| DB 'PUS',('H'+80H) AND 0FFH,0C5H | |
| DB 0 | |
| ; | |
| DB 0CFH | |
| GBTBL DB 'LDA',('X'+80H) AND 0FFH,0AH | |
| DB 'STA',('X'+80H) AND 0FFH,02H | |
| DB 0 | |
| ; | |
| ; REGISTER NAME | |
| RNAME DB 'BCDEHLMA',0 | |
| RPNAME DB 'BDH',0 | |
| RPSP DB 'S',('P'+80H) AND 0FFH | |
| RPPSW DB 'PS',('W'+80H) AND 0FFH | |
| ; | |
| ORG 0-LINSIZ-6 | |
| STKBTM | |
| LBUF DS LINSIZ | |
| SVPTR DS 2 | |
| ADRSS DS 2 | |
| ADRSE DS 2 | |
| ; | |
| END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment