File
Open ►
Save to ►
emulator RAM
emulator script
Close
Edit
Cut
Copy
Paste
View
Emulator
Assembler
Disassembler
Help
Topic
About
###
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Windowed output ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .trace ; display translation log .80x80 ; 80x80-processor mnemonic set .x80 ; 80x80-processor instructions set .complex ; 80x80-processor complex instructions .errors 65535 _Pos_ EQU 0x7600 ; OS-char out address _SP_ EQU 0xF84D ; OS-stack pointer _F800 EQU 0xF800 ; OS-cold start _F803 EQU 0xF803 ; OS-conin _F809 EQU 0xF809 ; OS-conout _F815 EQU 0xF815 ; OS-hexout _F818 EQU 0xF818 ; OS-text out function _F86C EQU 0xF86C ; OS-entry Demo: ORG 0x0000 ; Start point ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 156x60 : 9Cx3C MOV SP,0x75FF CALL Init MOV BX,40000 .loop: PUSH BX CALL Show16 ADD AL,0x30 CALL 0xFCB9 MOV AL,BH CALL 0xF815 MOV AL,BL CALL 0xF815 POP BX MOV CL,0x0D CALL 0xF809 MOV CX,1 ADD BX,CX ; JNC .loop ; CALL 0xF803 MOV BX,0x1234 MOV DX,0x5678 MOV CX,0xFACE ; CALL PushHex CALL 0xF815 CALL 0xF803 MOV BX,0x1E4E MOV [ViewPort.Size],BX MOV BX,0x0000 MOV [ViewPort.Org],BX XCHG DX,BX MOV BX,0x3090 XCHG DX,BX CALL Line MOV BX,0x122E MOV CL,0x03 .loop: PUSH CX PUSH BX CALL Circle POP BX POP CX DEC CL JNZ .loop MOV BX,DeskTop CALL 0xF818 CALL Window JMP 0xF86C ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Debg: PUSH DX,CX PUSH BX MOV BX,0x76D0;77BA MOV DX,ViewPort.Seq MOV AL,[DX] AND AL,AL SUB AL,0x02 MOV CL,AL INC DX MOV CH,0x0B .loop: MOV AL,CL ADD AL,0x01 MOV CL,AL SBB AL,AL PUSHF AL AND AL,0x3E MOV [BX],AL MOV AL,[DX] DEC DX CALL .decs POPF AL DEC CH JNZ .loop POP CX PUSH CX MOV AL,CH AND AL,0x03 MOV CH,AL MOV AL,0xFE SUB AL,CL MOV CL,AL MOV AL,0x03 SBB AL,CH MOV CH,AL JNC .end MOV CX,0 .end: PUSH CX POP BX MOV [ViewPort.Val],BX POP BX POP CX,DX RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;; .decs: PUSHF AL PUSH DX PUSH CX PUSH BX INC BX INC BX INC BX INC BX MOV DH,AL MOV CH,0x02 ..loop: MOV DL,10 CALL Divide ADD AL,0x30 DEC BX MOV [BX],AL DEC CH JNZ ..loop MOV AL,DH ADD AL,0x30 DEC BX MOV [BX],AL POP BX MOV CX,0x004E ADD BX,CX POP CX POP DX POPF AL RET ;;;;;;;; DH / DL % AL Divide: PUSH BX PUSH CX MOV CH,0x01 MOV BL,DL MOV BH,0x00 MOV AL,BL .shift: MOV CL,CH MOV BL,AL INC CH ROL AL JNC .shift .loop: MOV AL,DH SUB AL,BL JC .less MOV DH,AL .less: MOV AL,BH CMC ADC AL,AL MOV BH,AL .next: MOV AL,BL ROR AL MOV BL,AL DEC CL JNZ .loop MOV AL,DH MOV DH,BH POP CX POP BX RET ;;;;;;;; AB.CD > A.BC.D0 > XA.BC Show16: PUSH DX,CX PUSH BX POP DX MOV AL,4 .loop: PUSHF AL PUSH BX MOV BX,10 CALL Div16 POP BX MOV AL,CL ADD BX,BX ADC AL,AL ADD BX,BX ADC AL,AL ADD BX,BX ADC AL,AL ADD BX,BX ADC AL,AL MOV BL,BH MOV BH,AL POPF AL DEC AL JNZ .loop MOV AL,DL POP CX,DX RET ;;;;;;;; DX / BX % CX Div16: PUSH BX PUSH DX MOV AL,BL NOT AL MOV BL,AL MOV AL,BH NOT AL MOV BH,AL MOV DX,0x0001 ADD BX,DX JC .end POP CX DEC DX PUSH DX .shift: PUSH BX ADD BX,BX JC .shift PUSH CX .back: POP BX PUSH CX .loop: POP CX POP CX PUSH BX MOV AL,CL OR AL,CH JZ .end XCHG DX,BX ADD BX,BX XCHG BX,DX XOR AL,AL ADD BX,CX ADC AL,DL MOV DL,AL ROR AL JNC .back JMP .loop .end: POP CX POP BX RET ;;;;;;;;;;;;;;;;;;;;;;;;;;; PushView:MOV [.rbx+1],BX POP BX MOV [.rip+1],BX MOV BX,[ViewPort.Org] PUSH BX MOV BX,[ViewPort.Size] PUSH BX MOV BX,[ViewPort.Cursor] PUSH BX MOV BX,[ViewPort.Blank] PUSH BX MOV BX,[ViewPort.Seq] PUSH BX MOV BX,[ViewPort.Seq-2] PUSH BX MOV BX,[ViewPort.Seq-4] PUSH BX MOV BX,[ViewPort.Seq-6] PUSH BX MOV BX,[ViewPort.Seq-8] PUSH BX .rip: MOV BX,0 PUSH BX .rbx: MOV BX,0 RET DropView:MOV [.rbx+1],BX POP BX MOV [.rip+1],BX POP BX MOV [ViewPort.Seq-8],BX POP BX MOV [ViewPort.Seq-6],BX POP BX MOV [ViewPort.Seq-4],BX POP BX MOV [ViewPort.Seq-2],BX POP BX MOV [ViewPort.Seq],BX POP BX MOV [ViewPort.Blank],BX POP BX MOV [ViewPort.Cursor],BX POP BX MOV [ViewPort.Size],BX POP BX MOV [ViewPort.Org],BX .rip: MOV BX,0 PUSH BX .rbx: MOV BX,0 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Window: MOV BX,Windows MOV AL,[BX] AND AL,AL RET Z .loop: INC BX PUSH BX MOV BX,ViewPort.Seq MOV CL,0x07 ..loop: MOV [BX],0x00 DEC BX DEC CL JNZ ..loop MOV BH,AL MOV BL,CL ADD BX,BX ADD BX,BX MOV DX,0x1000 ADD BX,DX MOV [WinStat],BX XOR AL,AL CALL 0xF818 XCHG DX,BX POP BX MOV AL,[BX] AND AL,AL JNZ .loop XCHG BX,DX .type: MOV [..rbx+1],BX PUSH BX CALL PushView CALL Debg PUSHF AL MOV BX,State CALL 0xF818 ..rbx: MOV BX,0 POPF AL CALL DropView PUSHF AL MOV BX,[ViewPort.Cursor] XCHG DX,BX MOV BX,[ViewPort.Org] ADD BX,DX MOV DX,0xC001 XCHG BX,DX MOV AL,0x80 MOV [BX],AL DEC BX MOV [BX],DL MOV [BX],DH POPF AL POP BX JNC ..inp DEC BX ..inp: CALL 0xF803 CMP AL,0x09 JZ .tab CMP AL,0x0C JZ .tabul CMP AL,0x7F JZ .back ..next: MOV [BX],AL MOV CL,AL CALL PutChar .zero: INC BX MOV [BX],0x00 JMP .type .back: DEC BX MOV AL,[BX] CMP AL,0x80 JNC .zero XOR AL,AL MOV [BX],AL MOV BX,[WinStat] CALL 0xF818 JMP .type .tabul: DEC BX MOV AL,[BX] INC BX CMP AL,0x0C MOV AL,0x0C JNZ .type.next DEC BX MOV [BX],0x00 MOV BX,Windows MOV CL,[BX] ..loop: INC BX MOV AL,[BX] DEC BX MOV [BX],AL INC BX AND AL,AL JNZ ..loop DEC BX MOV [BX],CL JMP Window .tab: MOV AL,[0x7606] AND AL,AL MOV AL,0x09 JNZ .type.next MOV BX,[WinStat] CALL 0xF818 MOV BX,Windows ..loop: MOV CH,CL MOV CL,AL MOV AL,[BX] INC BX AND AL,AL JNZ ..loop DEC BX DEC BX MOV [BX],CH DEC BX MOV [BX],CL MOV AL,CH INC BX JMP .loop State: DB "\e4;248;0;0;0;0;1;1;0;0M" DB "\e5;249M" DB "\e1;246M" DB "\e2;247M" DB "\e1;0;0;0B\e0C\x0C\x19\e0P" DB "\x0D\x18Позиция \eC\eT\e248;1M\e1D:\eT\e249;1M\e1D\x18Памяти:\eC\eT\e247;2M\e246;1M\e4D байт\eC\0" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Circle(BL=X; BH=Y; CL=R) Circle: MOV DL,0x00 ; X MOV DH,CL ; Y MOV AL,CL ADD AL,CL MOV CL,AL MOV AL,0x01 SUB AL,CL MOV CL,AL ; DELTA MOV CH,0x00 ; ERROR .loop: MOV AL,DH AND AL,AL JZ .exit CALL PSets MOV AL,CL AND AL,AL JNS .n1 MOV AL,CL ADD AL,DH ADD AL,AL SUB AL,0x01 JNC .n1 INC DL MOV AL,DL ADD AL,AL INC AL ADD AL,CL MOV CL,AL JMP .loop .n1: MOV AL,CL AND AL,AL JS .n2 JZ .n2 MOV AL,CL SUB AL,DL ADD AL,AL SUB AL,0x01 JS .n2 JZ .n2 DEC DH MOV AL,DH ADD AL,AL MOV CH,AL MOV AL,0x01 SUB AL,CH ADD AL,CL MOV CL,AL JMP .loop .n2: INC DL MOV AL,DL SUB AL,DH ADD AL,AL ADD AL,CL MOV CL,AL DEC DH JMP .loop .exit: RET PSets: PUSH BX,DX PUSH CX ADD BX,DX CALL PSet JNC .skip XOR AL,CL MOV [BX],AL .skip: POP CX POP DX,BX PUSH BX,DX PUSH CX MOV AL,BL ADD AL,DL MOV BL,AL MOV AL,BH SUB AL,DH MOV BH,AL CALL PSet JNC .skip1 XOR AL,CL MOV [BX],AL .skip1:POP CX POP DX,BX PUSH BX,DX PUSH CX MOV AL,BL SUB AL,DL MOV BL,AL MOV AL,BH SUB AL,DH MOV BH,AL CALL PSet JNC .skip2 XOR AL,CL MOV [BX],AL .skip2:POP CX POP DX,BX PUSH BX,DX PUSH CX MOV AL,BL SUB AL,DL MOV BL,AL MOV AL,BH ADD AL,DH MOV BH,AL CALL PSet JNC .skip3 XOR AL,CL MOV [BX],AL .skip3:POP CX POP DX,BX RET ; Line(BL=X1; BH=Y1; DL=X2; DH=Y2) Line: MOV AL,DH SUB AL,BH MOV DH,AL SBB AL,AL MOV CH,AL ; DH = Y2 < Y1 ? -1 : 0 XOR AL,DH SUB AL,CH MOV DH,AL ; CH = abs(Y2 - Y1) MOV AL,DL SUB AL,BL MOV DL,AL SBB AL,AL MOV CL,AL ; DL = X2 < X1 ? -1 : 0 XOR AL,DL SUB AL,CL MOV DL,AL ; CL = abs(X2 - X1) MOV AL,CL ADD AL,AL MOV AL,CH ADC AL,AL AND AL,0x81 MOV CH,AL ; DH = DY.0.0.0.0.0.0.DX MOV AL,DL CMP AL,DH SBB AL,AL AND AL,0x40 XOR AL,CH MOV CH,AL ; DH = DY.CX
\0" Right: DB "\r\n\t\0" Erase: DB "\x08 \x08\0" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0x0FF0 Windows:DB "\x01\x02\x03\0\0\0\0\0\0\0\0\0\0\0\0\0" ORG 0x1000 DeskTop:DB "\e30;78;0;0V\e23C\e23P\x1F\e0P\t\t\t\t\t\t\t\t\t\t\t\tО\e128Pконный менеджер \e0PV1.0 (C)2015 \0" WinStat:DW 0x0000 ORG 0x1400 DB "\e26;2;3;5V\e0C 1 2 3 4 5 6 7 8 910111213141516171819202122232425" DB "\e0;2;255;255B\e6C\e6P\x1F\e0;65;0;0B\e17C\e17P\x1F\e25;192;232;63B\e3C\e3P\x1F\e230;0;0;0B\e20C\e20P\x1F" DB "\e0;0;0;3B\e0P1\t\t9\t\t17\t\t25\t\t33\t\t41\t\t49\t\t57\t\t\x08\x36\x34\e255;0;0;0B" DB "\e0P W\e128PINDOW #1 \e2;0;24;253B";\x9B\0" DB "\e192C\e192P\x1F\e0C\e0PД\e128Pобро пожаловать в \e0PО\e128Pкна (C)2015!\r\n" DB "\e0PА\e128Pвтор и разработчик - \e0PА\e128Pликберов \e0PР\e128Pуслан\r\n" DB "\e0PС\e128Pправка по \e0PE\e128PSC-кодам:\r\n" DB "\e0PESC + %C\e128PHAR\e0PC\e128PODE\e0P + C :: C\e128PODE\e0PP\e128PAGE(ASCII)\r\n" DB "\e0PESC + %H;%W;%Y;%X + V :: V\e128PIEWPORT(\e0PX,Y,W,H)\r\n" DB "\e0PESC + %H;%W;%Y;%X + B :: B\e128PALANCE \e0PV\e128PIEWPORT(\e0PX,Y,W,H)\r\n" DB "\e0PESC + %Y1;%X1;%Y2;%X2 + L :: L\e128PINE(\e0PX1,Y1,X2,Y2)\r\n" DB "\e0PESC + %Y;%X + M :: M\e128PEM\e0PC\e128POPY(\e0P[0X7651+X] <- [0X7651+Y])\r\n" DB "\e0PESC + %N + D :: D\e128PECIMALS\e0PP\e128PRINT(P2, 4 OR 5 DECIMALS OF \e0P[0X7651])\r\n" DB "\e0P\t========\t========\t========\t========\t========\r\n\x9B" DB "0PУ\e128Pправление интерфейсом:\r\n" DB "\e0P
- П\e128Pереключение двух окон.\r\n" DB "\e0P
+
- Ц\e128Pиклическое переключение.\x0D\x0A\x1B\0" ORG 0x1800 DB "\e5;1;19;32V" DB "\e6C\e6P\x1F\e0;34;0;0B\e17C\e17P\x1F\e5;223;252;32B\e3C\e3P\x1F\e250;0;0;0B\e20C\e20P\x1F\e255;0;0;0B" DB "\e0C\e0P W\e128PINDOW #2 \e2;0;4;0B" DB "\e192C\e192P\x1F\e0PЛ\e128Pиния:\r\n\x9B" DB "2;3;12;47L\0" ORG 0x1C00 DB "\e5;1;21;20V" DB "\e6C\e6P\x1F\e0;34;0;0B\e17C\e17P\x1F\e5;223;252;32B\e3C\e3P\x1F\e250;0;0;0B\e20C\e20P\x1F\e255;0;0;0B" DB "\e0C\e0P W\e128PINDOW #3 \e2;0;4;0B" DB "\e192C\e192P\x1F\e0PЛ\e128Pиния:\r\n" DB "\x9B\0" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0x7644 ViewPort: DB "\0\0\0\0\0\0\0\0\0\0\0\0" .Seq: DB 0x00 ; Escape sequency .Val: DB 0x00 ; Temporal Value .Blank: DB 0x00 ; Clear Screen Symbol .Page: DB 0x00 ; Code-Page Base .Cursor: ; Typing relative position (X,Y) ..x: DB 0x00 ; Cursor X-Position ..y: DB 0x00 ; Cursor Y-Position .Size: ; Typing view port (Columns,Rows) ..sx: DB 0x40 ; View port Width ..sy: DB 0x19 ; View port Height .Org: ; Typing view offset (Left,Top) ..x: DB 0x08 ; View port X-Offset in Screen Buffer ..y: DB 0x03 ; View port Y-Offset in Screen Buffer AnsiUsr:DW 0xFD37 ; User Escape-Subroutine CharUsr:DW PutChar.other Screen: DW 0x76D0 ; Screen Buffer Base
###