ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace
;JPR-1 MIKRO BASIC ; ;***************************************** ; ; J P R - 1 M I K R O B A S I C 2 . 4 ; ;**************************************** ; ; TITLE 'JPR-1 MIKRO BASIC' ; ORG 0 ; JMP START TOP: LHLD TXTUNF INX H RET JMP BRST LENGHT: LHLD LEGT DCX H RET JMP BRST+9 BEND: CALL ENDCHK JMP RSTART ; ;START ; START: LXI SP,STACK CALL DISP CALL NULDIS XRA A STA MODE STA PORT24 LXI D,MSG1 CALL PRTSTG LXI H,TOP SHLD RANPNT LXI H,TXTBGN SHLD TXTUNF LXI H,BUFA SHLD BUFFER LXI H,BUFE SHLD BUFEND LXI H,TXTE START1: SHLD TXTEND ; ;RSTART HORKY START ; RSTART: CALL CRLF RSTAR1: LXI SP,STACK LXI D,OK SUB A STA MODE CMA STA MASKIN CALL PRTSTG LXI H,ST2+1 SHLD CURRNT ST2: LXI H,0 SHLD LOPVAR SHLD STKGOS ST3: MVI B,'>' CALL GETLN ST5: PUSH D CALL DBUFF CALL TSTNUM CALL IGNB MOV A,H ORA L POP B JZ DIRECT DCX D MOV A,H STAX D DCX D MOV A,L STAX D PUSH B PUSH D MOV A,C SUB E PUSH PSW CALL FNDLN PUSH D JNZ ST4 PUSH D CALL FNDNXT POP B LHLD TXTUNF CALL MVUP MOV H,B MOV L,C SHLD TXTUNF ST4: POP B LHLD TXTUNF POP PSW PUSH H CPI 3 JZ RSTART ADD L MOV L,A MVI A,0 ADC H MOV H,A CALL DTXTE CALL COMP JNC QSORRY SHLD TXTUNF POP D CALL MVDOWN POP D POP H CALL MVUP JMP ST3 ; MSG1: DB 'MIKRO BASIC',0 ; ;TABULKA KLICOVICH SLOV ; TAB1: DB 'LIST',0 DW LIST DB 'LLIST',0 DW LLIST DB 'RUN',0 DW RUN DB 'NEW',0 DW NEW DB 'REWIND',0 DW REWIND TXMON: DB 'MONITOR',0 DW MONIT DB 'RAM',0 DW RAM DB 'LOAD',0 DW LOAD DB 'SAVE',0 DW SAVE TAB2: DB 'NEXT',0 DW NEXT DB 'LET',0 DW LET DB 'CLS',0 DW CLS DB 'CLEAR',0 DW CLEAR DB 'HARD',0 DW HARD DB 'DISPL',0 DW DISPL DB 'IF',0 DW IFF DB 'GOTO',0 DW GOTO DB 'GOSUB',0 DW GOSUB DB 'RETURN',0 DW RETURN DB 'REM',0 DW REM DB 'FOR',0 DW FOR DB 'INPUT',0 DW INPUT DB 'PRINT',0 DW PRINT DB 'LPRINT',0 DW LPRINT DB 'END',0 DW BEND DB 'STOP',0 DW STOP DB 'CALL',0 DW BCALL DB 'OUTCHAR',0 DW OUTCHR DB 'OUT',0 DW BOUT DB 'O$',0 DW O DB 'I$',0 DW I DB 'WAIT',0 DW WAIT DB 'BEEP',0 DW BEEP DB 'POKE',0 DW POKE DB 'MASK',0 DW MASK DB 'TAB',0 DW TAB DB 'BYTE',0 DW BYTE DB 'WORD',0 DW WORD DB 0 DW DEFLT TAB4: DB 'RND',0 DW RND DB 'ABS',0 DW ABS DB 'SIZE',0 DW SIZE DB 'PEEK',0 DW PEEK DB 'INCHAR',0 DW INCHAR DB 'HEX',0 DW HEX DB 'INM',0 DW INM DB 'IN',0 DW BIN DB 27H,0 DW QUOTE DB 'TOP',0 DW TOP DB 'AREM',0 DW AREM DB 'LEN',0 DW LENGHT DB 0 DW XP40 TAB5: DB 'TO',0 DW FR1 DB 0 DW QWHAT TAB6: DB 'STEP',0 DW FR2 DB 0 DW FR3 TAB8: DB '>=',0 DW XP11 DB '#',0 DW XP12 DB '>',0 DW XP13 DB '=',0 DW XP15 DB '<=',0 DW XP14 DB '<',0 DW XP16 DB 0 DW XP17 ; ;COMP POROVNANI HL A DE, Z=1 ; COMP: MOV A,H CMP D RNZ MOV A,L CMP E RET ; ;IGNB VYNECHANI MAEZER PODLE DE ; IGNB: LDAX D CPI 20H RNZ INX D JMP IGNB ; ;FINI ; FINI: POP PSW CALL FIN JMP QWHAT ; ;INDEXOVANA PROMENA ; TSTV: CALL IGNB SUI 40H RC JNZ TV1 INX D CALL PARN DAD H JC QHOW PUSH D XCHG CALL SIZE CALL COMP JC ASORRY LHLD TXTEND CALL SUBDE POP D RET ; ;VYPOCET ADRESY ULOZENI PROMENE ; TV1: CPI 1BH CMC RC INX D LXI H,VARBGN RLC ADD L MOV L,A MVI A,0 ADC H MOV H,A RET ; ;TSTC POROVNANI TEXTU PODLE DE SE ZNAKEM ;KTERY JE ZA CALL... JE-LI SHODNY POKRA- ;CUJE SE NA CALL...+2 JINAK NA ADRESE ;O N VYSSI.N JE NA ADRESE CALL..+2 ; TSTC: XTHL CALL IGNB CMP M INX H JZ TC2 PUSH B MOV C,M MVI B,0 DAD B POP B DCX D TC2: INX D INX H XTHL RET ; ;TSTNUM PREVOD ASCII CISLA Z BUFFERU PODLE ;DE NA BINARNI CISLO V HL ; TSTNUM: LXI H,0 MOV B,H CALL IGNB TN1: CPI '0' RC CPI 3AH RNC MVI A,0F0H ANA H JNZ QHOW INR B PUSH B MOV B,H MOV C,L DAD H DAD H DAD B DAD H LDAX D INX D ANI 0FH ADD L MOV L,A MVI A,0 ADC H MOV H,A POP B LDAX D JP TN1 ; ;QHOW OTAZKA HOW ; QHOW: PUSH D AHOW: LXI D,HOW JMP ERROR ; ;TEXTY OTAZEK ; HOW: DB 'HOW?',0DH OK: DB 'READY',0DH WHAT: DB 'WHAT?',0DH SORRY: DB 'SORRY',0DH ; ;NEW ; NEW: CALL ENDCHK LXI H,TXTBGN SHLD TXTUNF ; ;RUN ; RUN: CALL ENDCHK LXI D,TXTBGN RUNNXL: LXI H,0 CALL FNDLP JC RSTART RUNTSL: XCHG SHLD CURRNT XCHG INX D INX D RUNSML: XRA A STA MODE CALL CONT LXI H,TAB2-1 JMP EXEC ; ;GOTO ; GOTO: CALL EXPR PUSH D CALL ENDCHK CALL FNDLN JNZ AHOW POP PSW JMP RUNTSL ; ;HARD ; HARD: CALL PRNTST CALL FINI ; ;DISPL ; DISPL: CALL DISP CALL FINI ; ;LIST ; LLIST: CALL PRNTST LIST: CALL TSTNUM MVI A,0FFH STA LISTC CALL IGNB CPI 0DH JNZ LS4 LS0: CALL FNDLN LS1: JC LS6 LDA LISTC CPI 0FFH JZ LS5 DCR A JZ RSTART LS5: STA LISTC LS3: CALL PRTLN CALL FNDLP JMP LS1 LS4: CPI '+' JNZ LS0 INX D CALL IGNB PUSH H CALL TSTNUM MOV A,L INR A INR A STA LISTC POP H JMP LS0 LS6: CALL DISP JMP RSTAR1 ; ;PRINT ; LPRINT: CALL PRNTST PRINT: MVI C,8 CALL TSTC DB ':' DB 9 CALL CRLF CALL DISP JMP RUNSML CALL TSTC DB 0DH DB 9 CALL CRLF PR6: CALL DISP JMP RUNNXL PR0: CALL TSTC DB '*' DB 14 CALL EXPR MOV A,L RRC RRC ANI 0C0H STA MODE JMP PR3 CALL TSTC DB '#' DB 7 CALL EXPR MOV C,L JMP PR3 CALL QTSTG JMP PR8 PR3: CALL TSTC DB ',' DB 6 CALL FIN JMP PR0 CALL CRLF CALL DISP CALL FINI PR8: CALL EXPR PUSH B CALL PRTNUM POP B JMP PR3 ; ;GOSUB ; GOSUB: CALL PUSHA CALL EXPR PUSH D CALL FNDLN JNZ AHOW LHLD CURRNT PUSH H LHLD STKGOS PUSH H LXI H,0 SHLD LOPVAR DAD SP SHLD STKGOS JMP RUNTSL ; ;RETURN ; RETURN: CALL ENDCHK LHLD STKGOS MOV A,H ORA L JZ QWHAT SPHL POP H SHLD STKGOS POP H SHLD CURRNT POP D CALL POPA CALL FINI ; ;FOR ; FOR: CALL PUSHA CALL SETVAL DCX H SHLD LOPVAR LXI H,TAB5-1 JMP EXEC ; FR1: CALL EXPR SHLD LOPLMT LXI H,TAB6-1 JMP EXEC ; FR2: CALL EXPR JMP FR4 ; FR3: LXI H,1 FR4: SHLD LOPINC LHLD CURRNT SHLD LOPLN XCHG SHLD LOPPT LXI B,0AH LHLD LOPVAR XCHG MOV H,B MOV L,B DAD SP DB 3EH FR7: DAD B MOV A,M INX H ORA M JZ FR8 MOV A,M DCX H CMP D JNZ FR7 MOV A,M CMP E JNZ FR7 XCHG LXI H,0 DAD SP MOV B,H MOV C,L LXI H,0AH DAD D CALL MVDOWN SPHL FR8: LHLD LOPPT XCHG CALL FINI ; ;NEXT ; NEXT: CALL TSTV JC QWHAT SHLD VARNXT NX0: PUSH D XCHG LHLD LOPVAR MOV A,H ORA L JZ AWHAT CALL COMP JZ NX3 POP D CALL POPA LHLD VARNXT JMP NX0 NX3: MOV E,M INX H MOV D,M LHLD LOPINC PUSH H MOV A,H XRA D MOV A,D DAD D JM NX4 XRA H JM NX5 NX4: XCHG LHLD LOPVAR MOV M,E INX H MOV M,D LHLD LOPLMT POP PSW ORA A JP NX1 XCHG NX1: CALL CKHLDE POP D JC NX2 LHLD LOPLN SHLD CURRNT LHLD LOPPT XCHG CALL FINI NX5: POP H POP D NX2: CALL POPA CALL FINI ; ;REM ; REM: XCHG SHLD ARMM XCHG LXI H,0 JMP IFFR ; ;AREM ; AREM: LHLD ARMM RET ; ; ;CLEAR ; CLEAR: LXI H,VARBGN PUSH D LXI D,27*2 MVI C,0 CALL NULD20 POP D CALL FINI ; ;IF ; IFF: CALL EXPR IFFR: MOV A,H ORA L JNZ RUNSML CALL FNDSKP JNC RUNTSL JMP RSTART ; ;CHYBA VSTUPU ; INPERR: LHLD STKINP SPHL POP H SHLD CURRNT POP D POP D ; ;INPUT ; INPUT: IP1: PUSH D CALL QTSTG JMP IP2 CALL TSTV JC IP4 JMP IP3 IP2: PUSH D CALL TSTV JC QWHAT LDAX D MOV C,A SUB A STAX D POP D CALL PRTSTG MOV A,C DCX D STAX D IP3: PUSH D XCHG LHLD CURRNT PUSH H LXI H,IP1 SHLD CURRNT LXI H,0 DAD SP SHLD STKINP PUSH D MVI B,':' CALL GETLN CALL DBUFF CALL EXPR POP D XCHG MOV M,E INX H MOV M,D POP H SHLD CURRNT CALL CONT POP D IP4: POP PSW CALL TSTC DB ',' DB 3 JMP IP1 CALL FINI DEFLT: LDAX D CPI 0DH JZ LT1 ; ;LET ; LET: CALL SETVAL CALL TSTC DB ',' DB 3 JMP LET LT1: CALL FINI ; ;EXPR VYHODNOCENI VYRAZU ; EXPR: CALL EXPR2 PUSH H EXPR1: LXI H,TAB8-1 JMP EXEC XP11: CALL XP18 RC MOV L,A RET XP12: CALL XP18 RZ MOV L,A RET XP13: CALL XP18 RZ RC MOV L,A RET XP14: CALL XP18 MOV L,A RZ RC MOV L,H RET XP15: CALL XP18 RNZ MOV L,A RET XP16: CALL XP18 RNC MOV L,A RET XP17: POP H RET XP18: MOV A,C POP H POP B PUSH H PUSH B MOV C,A CALL EXPR2 XCHG XTHL CALL CKHLDE POP D LXI H,0 MVI A,1 RET EXPR2: CALL TSTC DB '-' DB 6 LXI H,0 JMP XP26 CALL TSTC DB '+' DB 0 CALL EXPR3 XP23: CALL TSTC DB '+' DB 15H PUSH H CALL EXPR3 XP24: XCHG XTHL MOV A,H XRA D MOV A,D DAD D POP D JM XP23 XRA H JP XP23 JMP QHOW CALL TSTC DB '-' DB 92H XP26: PUSH H CALL EXPR3 CALL CHGSGN JMP XP24 EXPR3: CALL EXPR4 XP31: CALL TSTC DB '*' DB 2DH PUSH H CALL EXPR4 MVI B,0 CALL CHKSGN XTHL CALL CHKSGN XCHG XTHL MOV A,H ORA A JZ XP32 MOV A,D ORA D XCHG JNZ AHOW XP32: MOV A,L LXI H,0 ORA A JZ XP35 XP33: DAD D JC AHOW DCR A JNZ XP33 JMP XP35 CALL TSTC DB '/' DB 4EH PUSH H CALL EXPR4 MVI B,0 CALL CHKSGN XTHL CALL CHKSGN XCHG XTHL XCHG MOV A,D ORA E JZ AHOW PUSH B CALL DIVIDE MOV H,B MOV L,C POP B XP35: POP D MOV A,H ORA A JM QHOW MOV A,B ORA A CM CHGSGN JMP XP31 EXPR4: LXI H,TAB4-1 JMP EXEC XP40: CALL TSTV JC XP41 MOV A,M INX H MOV H,M MOV L,A RET XP41: CALL TSTNUM MOV A,B ORA A RNZ PARN: CALL TSTC DB '(' DB 09 CALL EXPR CALL TSTC DB ')' DB 1 RET JMP QWHAT ; ;RND ; RND: CALL PARN MOV A,H ORA A JM QHOW ORA L JZ QHOW PUSH D PUSH H LHLD RANPNT LXI D,CONTE CALL COMP JC RA1 LXI H,COMP RA1: MOV E,M INX H MOV D,M SHLD RANPNT POP H XCHG PUSH B CALL DIVIDE POP B POP D INX H RET ; ;ABS ; ABS: CALL PARN DCX D CALL CHKSGN INX D RET ; ;SIZE ; SIZE: LHLD TXTUNF PUSH D XCHG LHLD TXTEND CALL SUBDE POP D RET ; ;DIVIE ; DIVIDE: PUSH H MOV L,H MVI H,0 CALL DV1 MOV B,C MOV A,L POP H MOV H,A DV1: MVI C,0FFH DV2: INR C CALL SUBDE JNC DV2 DAD D RET SUBDE: MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A RET ; CHKSGN: MOV A,H ORA A RP CHGSGN: MOV A,H ORA L RZ MOV A,H PUSH PSW CMA MOV H,A MOV A,L CMA MOV L,A INX H POP PSW XRA H JP QHOW MOV A,B XRI 80H MOV B,A RET ; CKHLDE: MOV A,H XRA D JP CK1 XCHG CK1: JMP COMP ; ;SETVAL ; SETVAL: CALL TSTV JC QWHAT PUSH H CALL TSTC DB '=' DB 0AH CALL EXPR MOV B,H MOV C,L POP H MOV M,C INX H MOV M,B RET JMP QWHAT ; ;FIN ; FIN: CALL TSTC DB ':' DB 4 POP PSW JMP RUNSML CALL TSTC DB 0DH DB 4 POP PSW JMP RUNNXL RET ; ;ENDCHK ; ENDCHK: CALL IGNB CPI 0DH RZ QWHAT: PUSH D AWHAT: LXI D,WHAT ERROR: SUB A STA MODE CALL PRTSTG CALL DISP POP D LDAX D PUSH PSW SUB A STAX D LHLD CURRNT PUSH H MOV A,M INX H ORA M POP D JZ RSTART MOV A,M ORA A JM INPERR CALL PRTLN DCX D POP PSW STAX D MVI A,3FH CALL OUTC SUB A CALL PRTSTG JMP RSTART QSORRY: PUSH D ASORRY: LXI D,SORRY JMP ERROR ; ;GETLN ; GETLN: MOV A,B CALL OUTC CALL DBUFF GL1: CALL CI CPI 8 JZ GL3 CPI 7FH JZ GL4 CALL OUTC STAX D INX D CPI 0DH RZ MOV A,E CXBUFE: PUSH H LHLD BUFEND CMP L POP H JNZ GL1 GL3: MOV A,E CXBUFA: PUSH H LHLD BUFFER CMP L POP H JZ GL4 CALL GL5 JMP GL1 GL4: CALL CRLF MVI B,'>' JMP GETLN GL5: DCX D MVI A,8 CALL OUTC MVI A,' ' CALL OUTC MVI A,8 JMP OUTC ; ;FNDLN ; FNDLN: MOV A,H ORA A JM QHOW LXI D,TXTBGN FNDLP: PUSH H LHLD TXTUNF DCX H CALL COMP POP H RC LDAX D SUB L MOV B,A INX D LDAX D SBB H JC FL2 DCX D ORA B RET ; ;FNDNXT ; FNDNXT: INX D FL2: INX D FNDSKP: LDAX D CPI 0DH JNZ FL2 INX D JMP FNDLP ; ;PRTSTG ; PRTSTG: MOV B,A PS1: LDAX D INX D CMP B RZ CALL OUTC CPI 0DH JNZ PS1 RET ; ;QTSTG ; QTSTG: CALL TSTC DB '"' DB 0FH MVI A,'"' QT1: CALL PRTSTG CPI 0DH POP H JZ PR6 QT2: INX H INX H INX H PCHL RET ; ;PRTNUM ; PRTNUM: MVI B,0 CALL CHKSGN JP PN1 MVI B,2DH DCR C PN1: PUSH D LXI D,0AH PUSH D DCR C PUSH B PN2: CALL DIVIDE MOV A,B ORA C JZ PN3 XTHL DCR L PUSH H MOV H,B MOV L,C JMP PN2 PN3: POP B PN4: DCR C MOV A,C ORA A JM PN5 MVI A,20H CALL OUTC JMP PN4 PN5: MOV A,B ORA A CNZ OUTC MOV E,L PN6: MOV A,E CPI 0AH POP D RZ ADI 30H CALL OUTC JMP PN6 ; ;PRTLN ; PRTLN: LDAX D MOV L,A INX D LDAX D MOV H,A INX D MVI C,4 CALL PRTNUM MVI A,20H CALL OUTC SUB A CALL PRTSTG RET ; ;MVUP ; MVUP: CALL COMP RZ LDAX D STAX B INX D INX B JMP MVUP ; ;MVDOWN ; MVDOWN: MOV A,B SUB D JNZ MD1 MOV A,C SUB E RZ MD1: DCX D DCX H LDAX D MOV M,A JMP MVDOWN ; ;POPA ; POPA: POP B POP H SHLD LOPVAR MOV A,H ORA L JZ PP1 POP H SHLD LOPINC POP H SHLD LOPLMT POP H SHLD LOPLN POP H SHLD LOPPT PP1: PUSH B RET ; ;PUSHA ; PUSHA: LXI H,STKLMT CALL CHGSGN POP B DAD SP JNC QSORRY LHLD LOPVAR MOV A,H ORA L JZ PU1 LHLD LOPPT PUSH H LHLD LOPLN PUSH H LHLD LOPLMT PUSH H LHLD LOPINC PUSH H LHLD LOPVAR PU1: PUSH H PUSH B RET ; ;CRLF , OUTC ; CRLF: MVI A,0DH OUTC: PUSH PSW CPI 0DH JZ LINEF CALL CO H2: POP PSW RET LINEF: CALL CROUT JMP H2 CROUT: MVI A,0DH CALL CO MVI A,0AH JMP CO ; ;NULOVANI DISPLEJE ; CLS: CALL NULDIS CALL FINI ; ;DIRECT MODUL ; DIRECT: LXI H,TAB1-1 EXEC: CALL IGNB PUSH D EX1: LDAX D INX D CPI '.' JZ EX3 INX H CMP M JZ EX1 MVI A,0 DCX D CMP M JZ EX5 EX2: INX H CMP M JNZ EX2 INX H INX H POP D JMP EXEC EX3: MVI A,0 EX4: INX H CMP M JNZ EX4 EX5: INX H MOV A,M INX H MOV H,M MOV L,A POP PSW PCHL ; ;DBUFF ; DBUFF: PUSH H LHLD BUFFER MOV D,H MOV E,L POP H RET DTXTE: PUSH H LHLD TXTEND MOV D,H MOV E,L POP H RET ; ;MASKA ; MASK: CALL EXPR MOV A,L STA MASKIN CALL FINI ; ;RAM ; RAM: CALL EXPR XCHG LXI H,TXTE XCHG CALL COMP JC ASORRY MOV A,H ORA A JM ASORRY MOV A,M CMA MOV M,A MOV B,M CMP B JNZ ASORRY SHLD BUFEND MOV A,L SUI 64 MOV L,A MOV A,H SBI 0 MOV H,A SHLD BUFFER DCX H DCX H JMP START1 ; ;CALL ; BCALL: CALL EXPR PUSH D LXI B,HERE PUSH B PCHL HERE: POP D CALL FINI ; ;OUT ; BOUT: CALL EXPR PUSH H CALL TSTC DB ',' DB 1AH CALL EXPR MOV B,L MVI A,0D3H STA IOBUFA POP H MOV A,L STA IOBUFB MVI A,0C9H STA IOBUFC MOV A,B CALL IOBUFA CALL FINI JMP QWHAT ; ;WAIT ; WAIT: CALL EXPR PUSH D WAIT1: MVI H,100 CALL WAIT2 DCR L JNZ WAIT1 POP D CALL FINI ; ;BEEP ; BEEP: CALL EXPR PUSH D BEEP1: XCHG CALL PIPO10 POP D CALL FINI WAIT2: MVI D,64H WAIT3: DCR D JNZ WAIT3 DCR H RZ JMP WAIT2 ; ;TAB ; TAB: CALL PARN A1: MOV A,H ORA L CZ FINI DCX H MVI A,20H CALL CO JMP A1 ; ;IN , INM ; BIN: CALL INEM MOV L,A RET INM: CALL INEM MOV L,A LDA MASKIN ANA L MOV L,A RET INEM: CALL PARN PUSH H MVI A,0DBH STA IOBUFA POP H MOV A,L STA IOBUFB MVI A,0C9H STA IOBUFC CALL IOBUFA MVI H,0 RET ; ;O$ ; O: CALL EXPR PUSH D XCHG XRA A CALL PRTSTG ZZZ4: POP D CALL FINI ; ;I$ ; I: CALL EXPR PUSH D XCHG LHLD TXTUNF XCHG CALL COMP JC ASORRY CALL DBUFF CALL GL1 MOV B,H MOV C,L XCHG DCX H CALL DBUFF PUSH D CALL MVUP XRA A STAX B POP D INX H CALL SUBDE XCHG LXI H,LEGT MOV M,E INX H MOV M,D JMP ZZZ4 ; ;PEEK ; PEEK: CALL PARN MOV L,M MVI H,0 RET ; ;POKE ; POKE: CALL EXPR PUSH H CALL TSTC DB ',' DB 9 CALL EXPR MOV A,L POP H MOV M,A CALL FINI JMP QWHAT ; ;BYTE ; BYTE: CALL PARN MOV A,L CALL WRIT2 CALL FINI ; ;WORD ; WORD: CALL PARN CALL PRHL CALL FINI ; WRIT2: PUSH PSW RRC RRC RRC RRC CALL IST POP PSW IST: ANI 0FH ADI 90H DAA ACI 40H DAA JMP OUTC ; ;QUOTE ; QUOTE: LDAX D INX D MOV L,A MVI H,0 CALL TSTC DB 27H DB 1 RET JMP QWHAT ; ;OUTCHAR ; OUTCHR: CALL EXPR MOV A,L CALL CO CALL FINI ; ;INCHAR ; INCHAR: CALL CI MVI H,0 MOV L,A RET ; ;HEX ; HEX: PUSH B LXI H,0 CALL TSTC DB '(' DB 1DH HNXTH: LDAX D CPI 0DH JZ QWHAT CALL NIBBLE JC QWHAT DAD H DAD H DAD H DAD H MVI B,0 MOV C,A DAD B INX D CALL TSTC DB ')' DB 3 JMP POPRET JMP HNXTH JMP QWHAT POPRET: POP B RET ; ;TEST TLACITKA BREAK ; CONT: LDA 2800H RLC RC JMP BREAK STOP: CALL ENDCHK BREAK: LHLD CURRNT XCHG CALL CRLF MVI A,'*' CALL OUTC CALL PRTLN JMP RSTART ; ;******************************************* ; ; KAZETOVY MAGNETOFON , TISKARNA ; ;***************************************** LOAD: MVI A,38H OUT 10H MVI A,0FFH OUT 11H LOAD40: IN 12H MVI B,0 LOAD30: IN 11H ANI 80H JNZ LOAD40 LOAD10: MOV A,B CPI 0FFH JZ LOAD20 CALL SEC1 MVI B,0FFH JMP LOAD30 LOAD20: MVI A,'*' CALL CO CALL PIN CPI 'B' JNZ LOAD40 MVI B,0 CALL PIN LOAD5: CALL CO CALL PIN CPI 0DH JNZ LOAD5 CALL PIN MOV E,A CALL PIN MOV D,A LXI H,TXTBGN LOAD4: CALL COMP JZ LOAD3 CALL PIN MOV M,A INX H JMP LOAD4 LOAD3: MOV C,B CALL PIN CMP C JNZ TPERR SHLD TXTUNF JMP SAVE3 SEC1: MVI L,20 DB 11H SEC3: MVI L,110 SEC31: MVI H,100 CALL WAIT2 DCR L JNZ SEC31 RET ; ; ; TOUT: PUSH PSW ADD B MOV B,A POP PSW OUT 12H TOUT1: IN 11H ANI 40H JZ TOUT1 RET ; ; ; PIN: IN 11H ANI 80H JZ PIN IN 12H PUSH PSW ADD B MOV B,A POP PSW RET ; ;SAVE ; SAVE: CALL LABEL LHLD TXTUNF MOV A,L CALL TOUT MOV A,H CALL TOUT XCHG LXI H,TXTBGN SAVE1: CALL COMP JZ SAVE2 MOV A,M CALL TOUT INX H JMP SAVE1 SAVE2: MOV A,B CALL TOUT CALL SEC1 SAVE3: MVI A,10H OUT 10H JMP RSTART ; ;TAPE ERROR ; TPERR: CALL CRLF LXI D,TPER SUB A CALL PRTSTG JMP RSTART TPER: DB 'ERROR',0 ; ;VSTUP LABELU ; LABEL: LXI D,TLAB SUB A CALL PRTSTG MVI B,'=' CALL GETLN MVI A,30H OUT 10H MVI A,0FFH OUT 11H CALL SEC3 MVI A,'B' CALL TOUT CALL DBUFF MVI B,0 LAB1: LDAX D PUSH PSW CALL TOUT POP PSW CPI 0DH RZ INX D JMP LAB1 TLAB: DB 'NAME ',0 ; ;PREVIJENI KAZETY ; REWIND: MVI A,38H OUT 10H REW10: CALL CI JMP SAVE3 ; ;VYSTYP NA TISKARNU ; COP: CALL OUTDIS PUSH H LXI H,2C00H MOV M,A PUSH PSW DCX H MVI M,1 INX H ZZZ1: MOV A,M ANI 40H JZ ZZZ1 DCX H MVI M,3 INX H ZZZ2: MOV A,M ANI 40H JNZ ZZZ2 DCX H MVI M,1 POP PSW POP H RET ; ;ZMENA VYSTUPU ; PRNTST: LXI H,COP ZZZ3: SHLD CO+1 RET ; DISP: MVI A,0C3H STA CO LXI H,OUTDIS JMP ZZZ3 ; ;MIKRO BASIC JPR-1 ;******************************************** ; ; DISPLEJ JPR-1 ; ;******************************************** ; ;ZRUSENI UKAZATELE ; OUTDIS: PUSH PSW PUSH H PUSH D PUSH B MOV C,A CALL SESTAV LDA MODE MOV B,A MOV A,M ANI 0C0H CPI 80H JNZ OUTD1 MOV A,B ORA A JNZ OUTD1 MOV A,M ANI 7FH MOV M,A ; ;CR, LF, BS A ULOZENI ZNAKU ; OUTD1: MOV A,C CPI 0DH JZ CRDS CPI 08H JZ BACK CPI 0AH JZ LFDS ANI 3FH MOV E,A MOV A,B ORA E MOV M,A ANI 0C0H CPI 0C0H CZ IPOZ CALL IPOZ ; ;NAVRAT ; ; ;OBNOVENI UKAZATELE ; OUTD10: LDA MODE ORA A JNZ ZZZ13 CALL SESTAV MOV A,M ORI 80H MOV M,A ZZZ13: POP B POP D POP H POP PSW RET ; ;CURSOR ZPET ; BACK: LDA POZICE DCR A CPI 0FFH JZ BACK10 STA POZICE JMP OUTD10 BACK10: LDA RADEK DCR A CPI 0FFH JZ NULD30 STA RADEK MVI A,39 STA POZICE JMP OUTD10 ; ;INKREMENT POZICE NA RADKU ; IPOZ: LDA POZICE INR A STA POZICE CPI 40 RC XRA A STA POZICE ; ;INKREMENT RADKU ; IRAD: LDA RADEK INR A CPI 24 JZ ROLDIS JMP ZZZ5 ; ;NULOVANI DISPLEJE ; NULDIS: PUSH PSW PUSH H PUSH D PUSH B NULD30: LXI H,3800H LXI D,2048 CALL NULD10 CALL HOME JMP OUTD10 ; NULD10: MVI C,20H NULD20: MOV M,C INX H DCX D MOV A,D ORA E JNZ NULD20 RET ; ;CR ; CRDS: XRA A STA POZICE JMP OUTD10 ; ;LF ; LFDS: CALL IRAD JMP OUTD10 ; ;ROLOVANI DISPLEJE ; ROLDIS: LXI H,3800H LXI D,3840H MVI C,23 MOVS: CALL MOVR PUSH B LXI B,18H DAD B XCHG DAD B XCHG POP B DCR C JNZ MOVS LXI H,3DC0H LXI D,64 JMP NULD10 MOVR: MVI B,28H MOVZ: LDAX D MOV M,A INX D INX H DCR B JNZ MOVZ RET ; ;SESTAVENI ADRESY CURSORY DO H,L ; SESTAV: MVI H,0 LDA RADEK MOV L,A MVI B,6 SES10: DAD H DCR B JNZ SES10 LDA POZICE ORA L MOV L,A MOV A,H ORI 38H MOV H,A RET ; ;HOME ; HOME: XRA A STA POZICE ZZZ5: STA RADEK RET ;MIKRO BASIC JPR-1 ;**************************************** ; ; KLAVESNICE JPR-1 ; ;**************************************** ; ;ZACATEK ; CI: PUSH B PUSH D PUSH H KLIN10: MVI C,80H KLIN20: MVI D,5 MVI B,1EH MVI H,0 ; ;GENERACE SIGNALU PRO SLOUPEC ; KLIN30: LDA PORT24 ANI 0E0H ORA B STA 2400H MOV A,B STC RAL ANI 1FH MOV B,A LDA 2400H CPI 0FFH CNZ KLIN50 DCR D JNZ KLIN30 ; ;PROBEHL CELI CIKLUS , 5 SPOUPCU ; CALL SHOF MOV A,C CPI 1 JZ KLIN40 JC KLIN20 CPI 80H JZ KLIN90 JMP KLIN10 ; ;PLATNY ZNAK A NAVRAT ; KLIN40: MOV A,L ADD H LXI H,TABZN MOV C,A MVI B,0 DAD B CALL PIPO MOV A,M POP H POP D POP B RET ; ;KLAVESNICE V KLIDU ; KLIN90: MVI C,90H KLIN99: DCR C JNZ KLIN99 MVI C,0 JMP KLIN20 ; ;PROHLEDANI RADKU ; KLIN50: MVI E,8 KLIN60: RRC CNC KLIN70 DCR E JNZ KLIN60 RET ; ;SESTAVENI KODU KLAVESY ; KLIN70: PUSH PSW MOV A,D DCR A RLC RLC RLC ANI 38H DCR E ORA E INR E CPI 7 JZ KLIN80 MOV L,A INR C POP PSW RET ; ;PRIZNAK SHIFT ; KLIN80: MVI H,28H CALL SHON POP PSW RET ; ;SIGNALIZACE SHIFT ; SHOF: LDA PORT24 ANI 0D0H SHOF10: STA PORT24 STA 2400H RET SHON: LDA PORT24 ORI 20H JMP SHOF10 ; ;TABULKA ASCII ; TABZN: DB '0P',0DH,08H,'1QA' DB 0EH,'9OL 2W' DB 'SZ8IKM3EDX' DB '7UJN4RFC6Y' DB 'HB5TGV)' ; ;KODY PRI SHIFT ; DB 07FH,0DH,08H,'!QA' DB 0EH,'(#= ?WSZ' DB '>@*."E&X<:' DB '-,$%\[',27H,'/+;^T_]' ; ;PIPNUTI ; PIP: PUSH B LDA PORT24 ORI 40H STA 2400H MVI C,42H PIP20: DCR C JNZ PIP20 ANI 0B0H STA 2400H MVI C,50H PIP30: DCR C JNZ PIP30 POP B RET ; ;ZAPIPANI ; PIPO: LXI D,40H PIPO10: CALL PIP DCX D MOV A,D ORA E JNZ PIPO10 RET ; ;*************************************** ; ; MIKRO MONITOR JPR-1 ; ;*************************************** ; PRHL: MOV A,H CALL WRIT2 MOV A,L JMP WRIT2 ; ;VSTUP HEXA ADRESY ; MEXPR: LXI H,0 MEXO: CALL CI MOV C,A CALL CO MEX1: CALL NIBBLE JC MEX2 DAD H DAD H DAD H DAD H ORA L MOV L,A JMP MEXO NIBBLE: SUI '0' RC CPI 'G'-'0' CMC RC CPI 10 CMC RNC SUI 'A'-'9'-1 CPI 10 RET MEX2: MOV A,C CPI 0DH JZ ECHU CPI 20H RZ EROR: MVI A,'?' CALL CO JMP MLOOP ECHU: PUSH PSW MVI A,0AH CALL CO POP PSW MOV C,A RET ;VYPOCET DELKY INSTRUKCE ; LENG: MVI B,0 PUSH H POP D MOV A,M CPI 0C3H JZ B3 CPI 0CDH JZ B3 ANI 0EFH CPI 22H JZ B3 CPI 2AH JZ B3 ANI 0CFH CPI 1 JZ B3 ANI 0C7H CPI 0C2H JZ B3 CPI 0C4H JZ B3 MOV A,M ANI 0F7H CPI 0D3H JZ B2 ANI 0E7H ANI 0C7H CPI 6 JZ B2 CPI 0C6H JZ B2 JMP B1 B3: INR B B2: INR B B1: INR B XCHG RET ; ;ZACATEK MONITORU ; MONIT1: CALL NULDIS MONIT: LXI SP,STACK MLOOP: CALL CROUT LXI D,TXMON SUB A CALL PRTSTG CALL CROUT MVI A,'*' CALL CO CALL CI CALL CO CPI 'D' JZ ENTER CPI 'S' JZ SUEX CPI 'G' JZ GOEX CPI 'B' JZ START CPI 'R' JZ RSTART JMP EROR ; SUEX: LXI H,MLOOP PUSH H GOEX: CALL MEXPR PCHL ; ENTER: CALL MEXPR ; LOOP: CALL CROUT ; LOOPA: CALL PRHL CALL LENG PUSH B PUSH H LOOP1: MVI A,' ' CALL CO MOV A,M CALL WRIT2 INX H DCR B JNZ LOOP1 POP D POP B MVI A,4 SUB B MOV B,A RLC ANI 0FH ADD B MOV B,A LPP: MVI A,' ' CALL CO DCR B JNZ LPP ; ;VYPIS ASCII ; MVI A,':' CALL CO LDAX D ANI 7FH CPI 20H JC CONTM CPI 7FH JNZ CONT1 CONTM: MVI A,' ' CONT1: CALL CO MVI A,':' CALL CO LOOP2: CALL CI MOV C,A CALL CO CPI 08 JZ BACKGO CPI ' ' JZ LPPA CPI 0DH JZ LOOP CPI '.' JZ MLOOP CPI '"' JZ TEXT PUSH H LXI H,0 CALL MEX1 MOV B,A MOV A,L STAX D INX D MOV A,B POP H CPI ' ' JZ LOOP2 CPI 0DH JNZ EROR XCHG JMP LOOPA ; ; BACKGO: DCX D XCHG JMP LOOP ; LPPA: XCHG INX H JMP LOOP ; TEXT: CALL CI CALL CO CPI '"' JZ CONTE MOV C,A STAX D LDAX D CMP C JNZ EROR INX D JMP TEXT ; CONTE: CALL CI CPI ' ' JZ LOOP2 XCHG JMP LOOP ; DB 24H ;VERZE 02-04 ; ;********************************************* ; ; DEFINICE RAM ; ;********************************************* ; ORG 4000H ; PORT24: DS 1 LEGT: DS 2 IOBUFA: DS 1 IOBUFB: DS 1 IOBUFC: DS 1 LISTC: DS 1 CO: DS 3 MASKIN: DS 1 CURRNT: DS 2 STKGOS: DS 2 VARNXT: DS 2 STKINP: DS 2 LOPVAR: DS 2 LOPINC: DS 2 LOPLMT: DS 2 LOPLN: DS 2 LOPPT: DS 2 RANPNT: DS 2 ARMM: DS 2 RADEK: DS 1 POZICE: DS 1 MODE: DS 1 TXTUNF: DS 2 DS 40 STKLMT: DS 2 DS 97 STACK: DS 2 VARBGN: DS 54 TXTEND: DS 2 BUFFER: DS 2 BUFEND: DS 2 TXTBGN: DS 2 DS 1722 TXTE: DS 2 BUFA: DS 64 BUFE: DS 1 BRST: DS 18 ; END
ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace