Asmsource 0
Asmsource 0
;
;
;//#define MEM_SIZE 2048 // ������ ����� ���������� � ������
;//#define BLOCK_SIZE 64 // ������ ����� �� ������ ����� ���������� �
��������������
; // ������� �������� ��������� �� ��������
������
; // �������� ��������� ���� ����-��� ����� USB
������ �������� �����
; // �� ��������� � ������� ����� 1024 ����
���������� ����� ������������
;//#define WRITE_PAGE_SIZE 8
;
;emem fbuf=0,fsel=2; // ������� ������
; // fbuf - ��, ��� ����� �� ������ ���������
; // fsel - �� �������-�������� ��������� ����
��� ����
;byte buf[64];
;
;string s1;
;
;proc on_dump_check_crash()
PROCON_DUMP_CHECK_CRASH:
PUSHR 5
ENTER 0,5
;{
; R0=V1
; R1=ADDR
; R2=DUMP_ERROR
; var v1, addr, dump_error;
;
;
; dump_error = 0;
;+o
LDB R2,0
;_o
; if(fbuf[0x260] = 0xFF){ dump_error = 1; }
;+o1
LDW R3,608
LDEM 0,R3,R3
MOV R14,R3
LDB R15,255
CMPJNE R14,R15,ON_DUMP_CHECK_CRASH_IF0_END
;-o1
;+o
LDB R2,1
;_o
ON_DUMP_CHECK_CRASH_IF0_END:
; if(fbuf[0x261] = 0xFF){ dump_error = 1; }
;
;+o1
LDW R3,609
LDEM 0,R3,R3
MOV R14,R3
LDB R15,255
CMPJNE R14,R15,ON_DUMP_CHECK_CRASH_IF1_END
;-o1
;+o
LDB R2,1
;_o
ON_DUMP_CHECK_CRASH_IF1_END:
; if(dump_error = 1)
;+o1
;LDB R15,1
;CMPJNE R2,R15,ON_DUMP_CHECK_CRASH_IF2_END
;-o1
CPIJNE R2,1,ON_DUMP_CHECK_CRASH_IF2_END
; {
; lbDumpState = "������ �����!";
SYS 0
LDW R15,STR_0
SYS 1
LDB R15,1
SYS 15
; print("\n..������! �������� ����!");
SYS 0
LDW R15,STR_1
SYS 1
SYS 12
JMP ON_DUMP_CHECK_CRASH_ELSE0_END
ON_DUMP_CHECK_CRASH_IF2_END:
; }
; else
; {
; addr = 0x20; v1 = 0;
;+o
LDB R1,32
;_o
;+o
LDB R0,0
;_o
; while(addr != 0x21)
ON_DUMP_CHECK_CRASH_WHILE0:
;+o1
;LDB R15,33
;CMPJE R1,R15,ON_DUMP_CHECK_CRASH_WHILE0_END
;-o1
CPIJE R1,33,ON_DUMP_CHECK_CRASH_WHILE0_END
; {
; v1 = v1 | fbuf[addr]; addr = addr + 1;
;+o
LDEM 0,R3,R1
MOV R4,R0
OR R4,R3
MOV R0,R4
;_o
;+o
;MOV R3,R1
;ADDB R3,1
;MOV R1,R3
;_o
ADDB R1,1
JMP ON_DUMP_CHECK_CRASH_WHILE0
ON_DUMP_CHECK_CRASH_WHILE0_END:
; }
;
; if(v1 != 0xff)
;+o1
;LDB R15,255
;CMPJE R0,R15,ON_DUMP_CHECK_CRASH_IF3_END
;-o1
CPIJE R0,255,ON_DUMP_CHECK_CRASH_IF3_END
; {
; lbDumpState = "CRASH!";
SYS 0
LDW R15,STR_2
SYS 1
LDB R15,1
SYS 15
; print("\n..��������� CRASH!");
SYS 0
LDW R15,STR_3
SYS 1
SYS 12
JMP ON_DUMP_CHECK_CRASH_ELSE1_END
ON_DUMP_CHECK_CRASH_IF3_END:
; }
; else
; {
; lbDumpState = "������";
SYS 0
LDW R15,STR_4
SYS 1
LDB R15,1
SYS 15
; print("\n..���� ������");
SYS 0
LDW R15,STR_5
SYS 1
SYS 12
ON_DUMP_CHECK_CRASH_ELSE1_END:
; }
ON_DUMP_CHECK_CRASH_ELSE0_END:
; }
PROC_ON_DUMP_CHECK_CRASH_END:
POPR 5
RET 0
; UsedRegs = 0000000000011111
;}
;
;proc on_dump_clear_crash()
PROCON_DUMP_CLEAR_CRASH:
PUSHR 3
ENTER 0,3
;{
; R0=ADDR
; R1=DUMP_ERROR
; var addr, dump_error;
;
; dump_error = 0;
;+o
LDB R1,0
;_o
; if(fbuf[0x260] = 0xFF){ dump_error = 1; }
;+o1
LDW R2,608
LDEM 0,R2,R2
MOV R14,R2
LDB R15,255
CMPJNE R14,R15,ON_DUMP_CLEAR_CRASH_IF0_END
;-o1
;+o
LDB R1,1
;_o
ON_DUMP_CLEAR_CRASH_IF0_END:
; if(fbuf[0x261] = 0xFF){ dump_error = 1; }
;
;+o1
LDW R2,609
LDEM 0,R2,R2
MOV R14,R2
LDB R15,255
CMPJNE R14,R15,ON_DUMP_CLEAR_CRASH_IF1_END
;-o1
;+o
LDB R1,1
;_o
ON_DUMP_CLEAR_CRASH_IF1_END:
; if(dump_error = 0)
;+o1
;LDB R15,0
;CMPJNE R1,R15,ON_DUMP_CLEAR_CRASH_IF2_END
;-o1
JNZ R1,ON_DUMP_CLEAR_CRASH_IF2_END
; {
; print("\n��������� CRASH...");
SYS 0
LDW R15,STR_6
SYS 1
SYS 12
; addr = 0x20;
;+o
LDB R0,32
;_o
; while(addr != 0xA0)
ON_DUMP_CLEAR_CRASH_WHILE0:
;+o1
;LDB R15,160
;CMPJE R0,R15,ON_DUMP_CLEAR_CRASH_WHILE0_END
;-o1
CPIJE R0,160,ON_DUMP_CLEAR_CRASH_WHILE0_END
; {
; fbuf[addr] = 0xFF; fsel[addr] = 2; addr = addr + 1;
;+o
LDB R15,255
STEM 0,R0,R15
;_o
;+o
LDB R15,2
STEM 2,R0,R15
;_o
;+o
;MOV R2,R0
;ADDB R2,1
;MOV R0,R2
;_o
ADDB R0,1
JMP ON_DUMP_CLEAR_CRASH_WHILE0
ON_DUMP_CLEAR_CRASH_WHILE0_END:
; }
;
; addr = 0x2B0;
;+o
LDW R0,688
;_o
; while(addr != 0x800)
ON_DUMP_CLEAR_CRASH_WHILE1:
;+o1
LDW R15,2048
CMPJE R0,R15,ON_DUMP_CLEAR_CRASH_WHILE1_END
;-o1
; {
; fbuf[addr] = 0xFF; fsel[addr] = 2; addr = addr + 1;
;+o
LDB R15,255
STEM 0,R0,R15
;_o
;+o
LDB R15,2
STEM 2,R0,R15
;_o
;+o
;MOV R2,R0
;ADDB R2,1
;MOV R0,R2
;_o
ADDB R0,1
JMP ON_DUMP_CLEAR_CRASH_WHILE1
ON_DUMP_CLEAR_CRASH_WHILE1_END:
; }
; print("\n..��!");
SYS 0
LDW R15,STR_7
SYS 1
SYS 12
JMP ON_DUMP_CLEAR_CRASH_ELSE0_END
ON_DUMP_CLEAR_CRASH_IF2_END:
; }
; else
; {
; print("\n..������! �������� ����!");
SYS 0
LDW R15,STR_8
SYS 1
SYS 12
ON_DUMP_CLEAR_CRASH_ELSE0_END:
; }
PROC_ON_DUMP_CLEAR_CRASH_END:
POPR 3
RET 0
; UsedRegs = 0000000000000111
;}
;
;proc voltage_to_string(value)
PROCVOLTAGE_TO_STRING:
; R0=VALUE
PUSHR 3
ENTER 1,3
;{
; R1=A
; var a;
; a = value % 100;
;+o
MOV R2,R0
MODB R2,100
MOV R1,R2
;_o
; value /= 100;
;+o
DIVB R0,100
;_o
; if((a % 10) > 5) a += 10 ;
;+o1
MOV R2,R1
MODB R2,10
MOV R14,R2
LDB R15,5
CMPJLE R14,R15,VOLTAGE_TO_STRING_IF0_END
;-o1
;+o
ADDB R1,10
;_o
VOLTAGE_TO_STRING_IF0_END:
; a /= 10;
;+o
DIVB R1,10
;_o
; s1 = #i.value+"."+#i.a;
SYS 0
MOV R15,R0
SYS 3
LDW R15,STR_9
SYS 1
MOV R15,R1
SYS 3
LDB R15,0
SYS 2
PROC_VOLTAGE_TO_STRING_END:
POPR 3
RET 1
; UsedRegs = 0000000000000111
;}
;
;proc print_errors(i)
PROCPRINT_ERRORS:
; R0=I
PUSHR 2
ENTER 1,2
;{
; print("\n ��� ������: "+#i.i);
SYS 0
LDW R15,STR_10
SYS 1
MOV R15,R0
SYS 3
SYS 12
; i = device.pins_error;
;+o
LDD R15,66881
SYS 19
MOV R1,R15
MOV R0,R1
;_o
; if(i & 1) print(" ���� CS (1 �����) �������� � '0'");
;+o1
;MOV R1,R0
;ANDB R1,1
;MOV R14,R1
;LDB R15,0
;CMPJE R14,R15,PRINT_ERRORS_IF0_END
JBRC R0,0,PRINT_ERRORS_IF0_END
;-o1
SYS 0
LDW R15,STR_11
SYS 1
SYS 12
PRINT_ERRORS_IF0_END:
; if(i & 2) print(" ���� CS (1 �����) �������� � '1'");
;+o1
;MOV R1,R0
;ANDB R1,2
;MOV R14,R1
;LDB R15,0
;CMPJE R14,R15,PRINT_ERRORS_IF1_END
JBRC R0,1,PRINT_ERRORS_IF1_END
;-o1
SYS 0
LDW R15,STR_12
SYS 1
SYS 12
PRINT_ERRORS_IF1_END:
; if(i & 4) print(" ���� SO (2 �����) �������� � '0'");
;+o1
;MOV R1,R0
;ANDB R1,4
;MOV R14,R1
;LDB R15,0
;CMPJE R14,R15,PRINT_ERRORS_IF2_END
JBRC R0,2,PRINT_ERRORS_IF2_END
;-o1
SYS 0
LDW R15,STR_13
SYS 1
SYS 12
PRINT_ERRORS_IF2_END:
PROC_PRINT_ERRORS_END:
POPR 2
RET 1
; UsedRegs = 0000000000000011
;}
;
;proc pin_test()
PROCPIN_TEST:
PUSHR 2
ENTER 0,2
;{
; R0=A
; var a;
; print("\n��� ������...");
SYS 0
LDW R15,STR_14
SYS 1
SYS 12
; for(;;)
PIN_TEST_FOR0:
; {
; a = device.pin_test(8,4);
;+o
LDB R1,8
PUSH R1
LDB R1,4
PUSH R1
LDB R15,0
ORW R15,512
SYS 17
MOV R1,R15
MOV R0,R1
;_o
; if(a = 0)
;+o1
;LDB R15,0
;CMPJNE R0,R15,PIN_TEST_IF0_END
;-o1
JNZ R0,PIN_TEST_IF0_END
; {
; print(" OK");
SYS 0
LDW R15,STR_15
SYS 1
SYS 12
; break;
JMP PIN_TEST_FOR0_END
PIN_TEST_IF0_END:
; }
; if(a = 0) break;
;+o1
;LDB R15,0
;CMPJNE R0,R15,PIN_TEST_IF1_END
;-o1
JNZ R0,PIN_TEST_IF1_END
JMP PIN_TEST_FOR0_END
PIN_TEST_IF1_END:
; PIN_TEST_WINDOW = a;
; // ������� �� ���� ���-������� ************
; // 0 - ���� OK
; // 1 - ���������
; // 2 - �������� ������
; //*****************************************
;+o
OUT 2,R0
;_o
; a = PIN_TEST_RESULT;
;+o
;IN R1,3
;MOV R0,R1
;_o
IN R0,3
; if(a != 1) break;
;+o1
;LDB R15,1
;CMPJE R0,R15,PIN_TEST_IF2_END
;-o1
CPIJE R0,1,PIN_TEST_IF2_END
JMP PIN_TEST_FOR0_END
PIN_TEST_IF2_END:
JMP PIN_TEST_FOR0
PIN_TEST_FOR0_END:
; }
; return(a);
MOV R15,R0
;JMP PROC_PIN_TEST_END
PROC_PIN_TEST_END:
POPR 2
RET 0
; UsedRegs = 0000000000000011
;}
;
;proc init()
PROCINIT:
PUSHR 3
ENTER 0,3
;{
; R0=I
; R1=TEMP
; var i,temp;
; if(WINDOW = 0) ShowWindow;
;+o1
;IN R2,33
;MOV R14,R2
;LDB R15,0
;CMPJNE R14,R15,INIT_IF0_END
;-o1
JNZIO 33,INIT_IF0_END
SYS 10
INIT_IF0_END:
; i = device.init(vcc); // �������� ������������ - �������� ������
;+o
LDMB R2,VCC
PUSH R2
LDB R15,1
ORW R15,256
SYS 17
MOV R2,R15
MOV R0,R2
;_o
; if(pin_tester)
;+o1
LDMB R2,pin_tester
;MOV R14,R2
;LDB R15,0
;CMPJE R14,R15,INIT_IF1_END
;-o1
CPIJE R2,0,INIT_IF1_END
; {
; if(pin_test() != 0)
;+o1
CALL PROCpin_test
MOV R2,R15
MOV R14,R2
LDB R15,0
CMPJE R14,R15,INIT_IF2_END
;-o1
; {
; device.poweroff();
LDB R15,2
SYS 18
SYS 11
; CloseWindow;
; return;
JMP PROC_INIT_END
INIT_IF2_END:
; }
INIT_IF1_END:
; }
; i = device.connect_power_pins(8,4);
;+o
LDB R2,8
PUSH R2
LDB R2,4
PUSH R2
LDB R15,3
ORW R15,512
SYS 17
MOV R2,R15
MOV R0,R2
;_o
; temp = i >> 16;
;+o
MOV R2,R0
RR R2,16
MOV R1,R2
;_o
; i &= 0xFFFF;
;+o
ANDW R0,65535
;_o
; voltage_to_string(i);
; //print("\nVCC = "+s1+" �");
; //print("\n"+#i.temp);
PUSH R0
CALL PROCVOLTAGE_TO_STRING
; if(temp < 450)
;+o1
LDW R15,450
CMPJGE R1,R15,INIT_IF3_END
;-o1
; {
; Device.PowerOff();
LDB R15,2
SYS 18
; return;
JMP PROC_READ_END
READ_IF1_END:
; }
; PBPOS = 0;PBMAX = 2048;
;+o
LDB R4,0
OUT 1,R4
;_o
;+o
LDW R4,2048
OUT 0,R4
;_o
; error= 0;
;+o
LDB R3,0
;_o
; for(adr = 0; adr < 2048; adr += 64)
LDB R2,0
READ_FOR1:
;+o1
LDW R15,2048
CMPJGE R2,R15,READ_FOR1_END
; {
; i = device.read_block(adr,64);
;+o
PUSH R2
LDB R4,64
PUSH R4
LDB R15,6
ORW R15,512
SYS 17
MOV R4,R15
MOV R0,R4
;_o
; i = device.pins_error;
;+o
LDD R15,66881
SYS 19
MOV R4,R15
MOV R0,R4
;_o
; if(i != 0)
;+o1
;LDB R15,0
;CMPJE R0,R15,READ_IF2_END
;-o1
JZ R0,READ_IF2_END
; {
; print("\n ������ �����. ");
SYS 0
LDW R15,STR_21
SYS 1
SYS 12
; print_errors(i);
PUSH R0
CALL PROCPRINT_ERRORS
; error = 255;
;+o
LDB R3,255
;_o
; break;
JMP READ_FOR1_END
READ_IF2_END:
; }
; block(fbuf[adr] = device.buf,64);
; ����� ���������
MOV R15,R2
; ����� ������ - ����������� 1279
LDW R14,1279
; ������ �����
; ORD 00400000
ORD R14,4194304
SYS 21
; PBPOS = adr+64;
;+o
MOV R4,R2
ADDB R4,64
OUT 1,R4
;_o
ADDB R2,64
JMP READ_FOR1
READ_FOR1_END:
; }
; Device.PowerOff();
LDB R15,2
SYS 18
; if(error = 0)
;+o1
;LDB R15,0
;CMPJNE R3,R15,READ_IF3_END
;-o1
JNZ R3,READ_IF3_END
; {
; print("\n������ ���������. "+#i.2048+" ���� ���������." );
SYS 0
LDW R15,STR_22
SYS 1
LDW R15,2048
SYS 3
LDW R15,STR_23
SYS 1
SYS 12
SYS 11
; CloseWindow;
READ_IF3_END:
; }
PROC_READ_END:
POPR 5
RET 0
; UsedRegs = 0000000000011111
;}
;
;proc verify()
PROCVERIFY:
PUSHR 6
ENTER 0,6
;{
; R0=I
; R1=TEMP
; R2=ADR
; R3=ERROR
; var i,temp,adr,error;
;
; if(WINDOW = 0) ShowWindow;
;+o1
;IN R4,33
;MOV R14,R4
;LDB R15,0
;CMPJNE R14,R15,VERIFY_IF0_END
;-o1
JNZIO 33,VERIFY_IF0_END
SYS 10
VERIFY_IF0_END:
; if(init() != 0) return;
;+o1
CALL PROCinit
MOV R4,R15
MOV R14,R4
LDB R15,0
CMPJE R14,R15,VERIFY_IF1_END
;-o1
JMP PROC_VERIFY_END
VERIFY_IF1_END:
; PBPOS = 0;PBMAX = 2048-1;
;+o
LDB R4,0
OUT 1,R4
;_o
;+o
LDW R4,2047
OUT 0,R4
;_o
; error= 0;
;+o
LDB R3,0
;_o
; temp = 0;
;+o
LDB R1,0
;_o
; for(adr = 0; adr < 2048; adr += 64)
LDB R2,0
VERIFY_FOR2:
;+o1
LDW R15,2048
CMPJGE R2,R15,VERIFY_FOR2_END
; {
; i = device.read_block(adr,64);
;+o
PUSH R2
LDB R4,64
PUSH R4
LDB R15,6
ORW R15,512
SYS 17
MOV R4,R15
MOV R0,R4
;_o
; if(i != 0)
;+o1
;LDB R15,0
;CMPJE R0,R15,VERIFY_IF2_END
;-o1
JZ R0,VERIFY_IF2_END
; {
; print("\n ������ �����. ");
SYS 0
LDW R15,STR_24
SYS 1
SYS 12
; print_errors(i);
PUSH R0
CALL PROCPRINT_ERRORS
; error = 255;
;+o
LDB R3,255
;_o
; break;
JMP VERIFY_FOR2_END
VERIFY_IF2_END:
; }
;
; block(buf = device.buf,64);
;
; �� ������ - ���������
LDW R15,BUF
; ����� ������ - ����������� 1279
LDW R14,1279
; ������ �����
; ORD 00400000
ORD R14,4194304
SYS 20
; for(i = 0 ; i < 64; i++)
LDB R0,0
VERIFY_FOR3:
;+o1
LDB R15,64
CMPJGE R0,R15,VERIFY_FOR3_END
; {
; if(buf[i] != fbuf[adr+i])
;+o1
;MOV R4,R0
;ADDW R4,buf
;LDIB R4,R4
ARDB R4,buf+R0
MOV R14,R4
MOV R4,R2
ADD R4,R0
LDEM 0,R5,R4
MOV R15,R5
CMPJE R14,R15,VERIFY_IF3_END
;-o1
; {
; fsel[adr+i] = 255;
;+o
MOV R5,R2
ADD R5,R0
LDB R15,255
STEM 2,R5,R15
;_o
; temp++;
;+o
ADDB R1,1
;_o
JMP VERIFY_ELSE0_END
VERIFY_IF3_END:
; }
; else fsel[adr+i] = 0;
;
;+o
MOV R5,R2
ADD R5,R0
LDB R15,0
STEM 2,R5,R15
;_o
VERIFY_ELSE0_END:
ADDB R0,1
JMP VERIFY_FOR3
VERIFY_FOR3_END:
; }
; PBPOS = adr+64;
;+o
MOV R4,R2
ADDB R4,64
OUT 1,R4
;_o
ADDB R2,64
JMP VERIFY_FOR2
VERIFY_FOR2_END:
; }
; Device.PowerOff();
LDB R15,2
SYS 18
; if(error = 0)
;+o1
;LDB R15,0
;CMPJNE R3,R15,VERIFY_IF4_END
;-o1
JNZ R3,VERIFY_IF4_END
; {
; print("\n�������� ���������. "+#i.2048+" ���� ���������. ������������:
"+#i.temp);
SYS 0
LDW R15,STR_25
SYS 1
LDW R15,2048
SYS 3
LDW R15,STR_26
SYS 1
MOV R15,R1
SYS 3
SYS 12
SYS 11
; CloseWindow;
VERIFY_IF4_END:
; }
PROC_VERIFY_END:
POPR 6
RET 0
; UsedRegs = 0000000000111111
;}
;
;proc read_sr()
PROCREAD_SR:
PUSHR 2
ENTER 0,2
;{
; R0=A
; var a;
; if(init() != 0) return;
;+o1
CALL PROCinit
MOV R1,R15
MOV R14,R1
LDB R15,0
CMPJE R14,R15,READ_SR_IF0_END
;-o1
JMP PROC_READ_SR_END
READ_SR_IF0_END:
; a = device.read_sr();
;+o
LDB R15,4
SYS 17
MOV R1,R15
MOV R0,R1
;_o
; device.poweroff();
LDB R15,2
SYS 18
; print("\nSR = "+#h1.a);
SYS 0
LDW R15,STR_27
SYS 1
MOV R15,R0
SYS 5
SYS 12
; a = (a >> 2) & 3;
;+o
MOV R1,R0
RR R1,2
ANDB R1,3
MOV R0,R1
;_o
; if(a = 0) print(": ��� ������ �� ������.");
;+o1
;LDB R15,0
;CMPJNE R0,R15,READ_SR_IF1_END
;-o1
JNZ R0,READ_SR_IF1_END
SYS 0
LDW R15,STR_28
SYS 1
SYS 12
READ_SR_IF1_END:
; if(a = 1) print(": a����� 0�600-0�7FF - ������ ������");
;+o1
;LDB R15,1
;CMPJNE R0,R15,READ_SR_IF2_END
;-o1
CPIJNE R0,1,READ_SR_IF2_END
SYS 0
LDW R15,STR_29
SYS 1
SYS 12
READ_SR_IF2_END:
; if(a = 2) print(": a����� 0�400-0�7FF - ������ ������");
;+o1
;LDB R15,2
;CMPJNE R0,R15,READ_SR_IF3_END
;-o1
CPIJNE R0,2,READ_SR_IF3_END
SYS 0
LDW R15,STR_30
SYS 1
SYS 12
READ_SR_IF3_END:
; if(a = 3) print(": �� ���������� - ������ ������");
;+o1
;LDB R15,3
;CMPJNE R0,R15,READ_SR_IF4_END
;-o1
CPIJNE R0,3,READ_SR_IF4_END
SYS 0
LDW R15,STR_31
SYS 1
SYS 12
READ_SR_IF4_END:
; sr_value = a;
;+o
STMB SR_VALUE,R0
;_o
PROC_READ_SR_END:
POPR 2
RET 0
; UsedRegs = 0000000000000011
;}
;
;proc Write()
PROCWRITE:
PUSHR 5
ENTER 0,5
;{
; R0=I
; R1=TEMP
; R2=ADR
; R3=ERROR
; var i,temp,adr,error;
;
; if(Flags & 2)
;+o1
LDMD R4,Flags
ANDB R4,2
MOV R14,R4
LDB R15,0
CMPJE R14,R15,WRITE_IF0_END
;-o1
; {
; temp = mbox("������������� ����������������?",1);
;+o
SYS 0
LDW R15,STR_32
SYS 1
ORD R15,65536
SYS 9
MOV R1,R15
; if(temp = 0)
;+o1
;LDB R15,0
;CMPJNE R1,R15,WRITE_IF1_END
;-o1
JNZ R1,WRITE_IF1_END
; {
; print("\n���������������� �������� �������������");
SYS 0
LDW R15,STR_33
SYS 1
SYS 12
; return;
JMP PROC_WRITE_END
WRITE_IF1_END:
; }
WRITE_IF0_END:
; }
;
; if(init() != 0) return;
;+o1
CALL PROCinit
MOV R4,R15
MOV R14,R4
LDB R15,0
CMPJE R14,R15,WRITE_IF2_END
;-o1
JMP PROC_WRITE_END
WRITE_IF2_END:
; temp = check_sr(1);
;+o
LDB R4,1
PUSH R4
CALL PROCCHECK_SR
;MOV R4,R15
;MOV R1,R4
MOV R1,R15
;_o
; if(temp)
;+o1
;LDB R15,0
;CMPJE R1,R15,WRITE_IF3_END
;-o1
JZ R1,WRITE_IF3_END
; {
; device.poweroff();
LDB R15,2
SYS 18
; return;
JMP PROC_WRITE_END
WRITE_IF3_END:
; }
;
; PBPOS = 0;PBMAX = 2048-1;
;+o
LDB R4,0
OUT 1,R4
;_o
;+o
LDW R4,2047
OUT 0,R4
;_o
; error= 0;
;+o
LDB R3,0
;_o
; temp = 0;
;+o
LDB R1,0
;_o
; if(page_mode = 0)
;+o1
LDMB R4,page_mode
;MOV R14,R4
;LDB R15,0
;CMPJNE R14,R15,WRITE_IF4_END
;-o1
JNZ R4,WRITE_IF4_END
; {
; for(adr = 0; adr < 2048; adr++)
LDB R2,0
WRITE_FOR4:
;+o1
LDW R15,2048
CMPJGE R2,R15,WRITE_FOR4_END
; {
; error = device.write_byte(adr,fbuf[adr]);
;+o
PUSH R2
LDEM 0,R4,R2
PUSH R4
LDB R15,7
ORW R15,512
SYS 17
MOV R4,R15
MOV R3,R4
;_o
; if(error != 0)
;+o1
;LDB R15,0
;CMPJE R3,R15,WRITE_IF5_END
;-o1
JZ R3,WRITE_IF5_END
; {
; print("\n ������ ������");
SYS 0
LDW R15,STR_34
SYS 1
SYS 12
; print_errors(error);
PUSH R3
CALL PROCPRINT_ERRORS
; break;
;JMP WRITE_FOR4_END
JMP WRITE_ELSE0_END
WRITE_IF5_END:
; }
; PBPOS = adr;
;+o
OUT 1,R2
;_o
ADDB R2,1
JMP WRITE_FOR4
WRITE_FOR4_END:
; }
JMP WRITE_ELSE0_END
WRITE_IF4_END:
; }
; else
; {
; for(adr = 0; adr < 2048; adr += 8)
LDB R2,0
WRITE_FOR5:
;+o1
LDW R15,2048
CMPJGE R2,R15,WRITE_FOR5_END
; {
; block(device.buf=fbuf[adr],8);
; ����� ������� � ����������: 1279
LDW R14,1279
; ����� ������� - ���������
MOV R15,R2
; ������ �����
; ORD = 00080000
ORD R14,524288
SYS 23
; error = device.write_page(adr,8);
;+o
PUSH R2
LDB R4,8
PUSH R4
LDB R15,8
ORW R15,512
SYS 17
MOV R4,R15
MOV R3,R4
;_o
; if(error != 0)
;+o1
;LDB R15,0
;CMPJE R3,R15,WRITE_IF6_END
;-o1
JZ R3,WRITE_IF6_END
; {
; print("\n ������ ������, ����� "+#i.adr+" (0x"+#h2.adr+")");
SYS 0
LDW R15,STR_35
SYS 1
MOV R15,R2
SYS 3
LDW R15,STR_36
SYS 1
MOV R15,R2
SYS 6
LDW R15,STR_37
SYS 1
SYS 12
; print_errors(error);
PUSH R3
CALL PROCPRINT_ERRORS
; break;
JMP WRITE_FOR5_END
WRITE_IF6_END:
; }
; PBPOS = adr+8;
;+o
MOV R4,R2
ADDB R4,8
OUT 1,R4
;_o
ADDB R2,8
JMP WRITE_FOR5
WRITE_FOR5_END:
; }
WRITE_ELSE0_END:
; }
; device.poweroff();
LDB R15,2
SYS 18
; if(error = 0)
;+o1
;LDB R15,0
;CMPJNE R3,R15,WRITE_IF7_END
;-o1
JNZ R3,WRITE_IF7_END
; {
; print("\n������ ���������. "+#i.2048+" ���� ��������.");
SYS 0
LDW R15,STR_38
SYS 1
LDW R15,2048
SYS 3
LDW R15,STR_39
SYS 1
SYS 12
SYS 11
; CloseWindow;
WRITE_IF7_END:
; }
PROC_WRITE_END:
POPR 5
RET 0
; UsedRegs = 0000000000011111
;}
;
;proc WriteC()
PROCWRITEC:
PUSHR 5
ENTER 0,5
;{
; R0=I
; R1=TEMP
; R2=ADR
; R3=ERROR
; var i,temp,adr,error;
;
; if(Flags & 2)
;+o1
LDMD R4,Flags
ANDB R4,2
MOV R14,R4
LDB R15,0
CMPJE R14,R15,WRITEC_IF0_END
;-o1
; {
; temp = mbox("������������� ����������������?",1);
;+o
SYS 0
LDW R15,STR_40
SYS 1
ORD R15,65536
SYS 9
MOV R1,R15
; if(temp = 0)
;+o1
;LDB R15,0
;CMPJNE R1,R15,WRITEC_IF1_END
;-o1
JNZ R1,WRITEC_IF1_END
; {
; print("\n���������������� �������� �������������");
SYS 0
LDW R15,STR_41
SYS 1
SYS 12
; return;
JMP PROC_WRITEC_END
WRITEC_IF1_END:
; }
WRITEC_IF0_END:
; }
;
; if(init() != 0) return;
;+o1
CALL PROCinit
MOV R4,R15
MOV R14,R4
LDB R15,0
CMPJE R14,R15,WRITEC_IF2_END
;-o1
JMP PROC_WRITEC_END
WRITEC_IF2_END:
; PBPOS = 0;PBMAX = 2048-1;
;+o
LDB R4,0
OUT 1,R4
;_o
;+o
LDW R4,2047
OUT 0,R4
;_o
; error= 0;
;+o
LDB R3,0
;_o
; temp = 0;
;+o
LDB R1,0
;_o
; for(adr = 0; adr < 2048; adr++)
LDB R2,0
WRITEC_FOR6:
;+o1
LDW R15,2048
CMPJGE R2,R15,WRITEC_FOR6_END
; {
; if(fsel[adr] != 0)
;+o1
LDEM 2,R4,R2
MOV R14,R4
LDB R15,0
CMPJE R14,R15,WRITEC_IF3_END
;-o1
; {
; error = device.write_byte(adr,fbuf[adr]);
;+o
PUSH R2
LDEM 0,R4,R2
PUSH R4
LDB R15,7
ORW R15,512
SYS 17
MOV R4,R15
MOV R3,R4
;_o
; if(error != 0)
;+o1
;LDB R15,0
;CMPJE R3,R15,WRITEC_IF4_END
;-o1
JZ R3,WRITEC_IF4_END
; {
; print("\n ������ ������, ����� "+#i.adr+" (0x"+#h2.adr+")");
SYS 0
LDW R15,STR_42
SYS 1
MOV R15,R2
SYS 3
LDW R15,STR_43
SYS 1
MOV R15,R2
SYS 6
LDW R15,STR_44
SYS 1
SYS 12
; print_errors(error);
PUSH R3
CALL PROCPRINT_ERRORS
; break;
JMP WRITEC_FOR6_END
JMP WRITEC_ELSE0_END
WRITEC_IF4_END:
; }
; else temp++;
;+o
ADDB R1,1
;_o
WRITEC_ELSE0_END:
WRITEC_IF3_END:
; }
; PBPOS = adr;
;+o
OUT 1,R2
;_o
ADDB R2,1
JMP WRITEC_FOR6
WRITEC_FOR6_END:
; }
; device.poweroff();
LDB R15,2
SYS 18
; if(error = 0)
;+o1
;LDB R15,0
;CMPJNE R3,R15,WRITEC_IF5_END
;-o1
JNZ R3,WRITEC_IF5_END
; {
; print("\n������ ���������. "+#i.temp+" ���� ��������.");
SYS 0
LDW R15,STR_45
SYS 1
MOV R15,R1
SYS 3
LDW R15,STR_46
SYS 1
SYS 12
SYS 11
; CloseWindow;
WRITEC_IF5_END:
; }
PROC_WRITEC_END:
POPR 5
RET 0
; UsedRegs = 0000000000011111
;}
;
;
;proc write_sr()
PROCWRITE_SR:
PUSHR 3
ENTER 0,3
;{
; R0=A
; R1=TEMP
; var a,temp;
; if(Flags & 2)
;+o1
LDMD R2,Flags
ANDB R2,2
MOV R14,R2
LDB R15,0
CMPJE R14,R15,WRITE_SR_IF0_END
;-o1
; {
; temp = mbox("������������� ����������������?",1);
;+o
SYS 0
LDW R15,STR_47
SYS 1
ORD R15,65536
SYS 9
MOV R1,R15
; if(temp = 0)
;+o1
;LDB R15,0
;CMPJNE R1,R15,WRITE_SR_IF1_END
;-o1
JNZ R1,WRITE_SR_IF1_END
; {
; print("\n���������������� �������� �������������");
SYS 0
LDW R15,STR_48
SYS 1
SYS 12
; return;
JMP PROC_WRITE_SR_END
WRITE_SR_IF1_END:
; }
WRITE_SR_IF0_END:
; }
; if(init() != 0) return;
;+o1
CALL PROCinit
MOV R2,R15
MOV R14,R2
LDB R15,0
CMPJE R14,R15,WRITE_SR_IF2_END
;-o1
JMP PROC_WRITE_SR_END
WRITE_SR_IF2_END:
; a = sr_value << 2;
;+o
LDMB R2,SR_VALUE
RL R2,2
MOV R0,R2
;_o
; a = device.write_sr(a);
;+o
PUSH R0
LDB R15,5
ORW R15,256
SYS 17
MOV R2,R15
MOV R0,R2
;_o
; if(a != 0)
;+o1
;LDB R15,0
;CMPJE R0,R15,WRITE_SR_IF3_END
;-o1
JZ R0,WRITE_SR_IF3_END
; {
; print("\n������ ������ �������� �������.");
SYS 0
LDW R15,STR_49
SYS 1
SYS 12
; device.poweroff();
LDB R15,2
SYS 18
; return;
JMP PROC_WRITE_SR_END
WRITE_SR_IF3_END:
; }
; a = device.read_sr();
;+o
LDB R15,4
SYS 17
MOV R2,R15
MOV R0,R2
;_o
; device.poweroff();
LDB R15,2
SYS 18
; print("\nSR = "+#h1.a);
SYS 0
LDW R15,STR_50
SYS 1
MOV R15,R0
SYS 5
SYS 12
; a = (a >> 2) & 3;
;+o
MOV R2,R0
RR R2,2
ANDB R2,3
MOV R0,R2
;_o
; if(a = 0) print(": ��� ������ �� ������.");
;+o1
;LDB R15,0
;CMPJNE R0,R15,WRITE_SR_IF4_END
;-o1
JNZ R0,WRITE_SR_IF4_END
SYS 0
LDW R15,STR_51
SYS 1
SYS 12
WRITE_SR_IF4_END:
; if(a = 1) print(": a����� 0�600-0�7FF - ������ ������");
;+o1
;LDB R15,1
;CMPJNE R0,R15,WRITE_SR_IF5_END
;-o1
CPIJNE R0,1,WRITE_SR_IF5_END
SYS 0
LDW R15,STR_52
SYS 1
SYS 12
WRITE_SR_IF5_END:
; if(a = 2) print(": a����� 0�400-0�7FF - ������ ������");
;+o1
;LDB R15,2
;CMPJNE R0,R15,WRITE_SR_IF6_END
;-o1
CPIJNE R0,2,WRITE_SR_IF6_END
SYS 0
LDW R15,STR_53
SYS 1
SYS 12
WRITE_SR_IF6_END:
; if(a = 3) print(": �� ���������� - ������ ������");
;+o1
;LDB R15,3
;CMPJNE R0,R15,WRITE_SR_IF7_END
;-o1
CPIJNE R0,3,WRITE_SR_IF7_END
SYS 0
LDW R15,STR_54
SYS 1
SYS 12
WRITE_SR_IF7_END:
PROC_WRITE_SR_END:
POPR 3
RET 0
; UsedRegs = 0000000000000111