1 ;********************************* 2 ;PROGRAM: 8748_IECEN_2.0 3 ; 4 ;BUECHEL APRIL 84 5 ;********************************* 6 ; 7 ; 100 ;DATA TRANSFER CBM64 - BROTHER 101 ;HR-15 CENTRONICS INTERFACE 109 ; 110 ; 120 ORG 000H 122 ;POWER UP VEKTOR 130 JMP LABEL0 ;JUMP TO MAINPROGRAM 132 ; 134 ; 148 ; 150 ORG 020H 152 ; ***COMIN*** 154 COMIN :JNT0 LABEL60 ;IF T0=0 THEN LABEL60 162 JNT0 COMIN ;REALLY T0=1 164 CALL RECEIVE 166 IN A,P2 ;READ SWITCH 170 CPL A 174 ANL A,#0FH 178 MOV R6,A ;STORE SWITCH INTO R6 180 ORL A,#20H ;CODE=SWITCH OR 20H 182 CPL A 186 INC A ;ACCU = TWO'S COMPLEMENT (SWITCH) 188 ADD A,R4 ;ACCU = CODE-SWITCH 190 JNZ LABEL57 ;JUMP IF CODE <> (SWITCH OR 20H) 194 CLR F1 198 CPL F1 ;LISTEN = TRUE 200 ; 201 LABEL51:JNT1 LABEL53 ;JUMP IF CLOCK=HIGH 202 JNT1 LABEL51 ;REALLY CLOCK=LOW 203 LABEL52:JT0 LABEL51 ;JUMP IF ATN=LOW 204 JT0 LABEL52 ;REALLY ATN=HIGH 205 JMP LABEL55 206 LABEL53:JT1 LABEL51 ;REALLY CLOCK=HIGH 207 CALL RECEIVE ;READ CHANNEL# 208 LABEL54:JT0 LABEL54 ;JUMP IF ATN=LOW 209 JT0 LABEL54 ;REALLY ATN=HIGH 210 LABEL55:JMP LABEL60 211 ; 214 LABEL57:MOV A,R4 216 ADD A,#0C1H ;ACCU = CODE-3FH 218 JNZ LABEL58 220 CLR F1 ;LISTEN = FALSE 224 LABEL58:ORL P1,#01 ;SET DATALEITUNG HIGH 226 LABEL59:JT0 LABEL59 ;IF ATN=LOW THEN LABEL59 228 JT0 LABEL59 ;REALLY ATN=HIGH 230 LABEL60:RET ;RETURN 258 ; 260 ; 262 ; 270 ORG 080H 272 ; 274 ; ***RECEIVE*** 277 RECEIVE:ANL P1,#0FEH ;SET DATALEITUNG LOW 278 MOV A,#0FDH ;SET TIMER 200US 279 MOV T,A 280 STRT T ;START TIMER 281 LABEL21:JTF LABEL22 282 JMP LABEL21 ;WAIT 200US 283 LABEL22:STOP TCNT ;STOP TIMER 284 LABEL23:JT1 LABEL23 ;IF T1=1 THEN LABEL23 285 JT1 LABEL23 ;REALLY T1=0 286 ; 287 ORL P1,#01 ;SET DATALEITUNG HIGH 288 MOV A,#0FDH ;SET TIMER 200US 289 MOV T,A 290 STRT T ;START TIMER 291 ; 292 LABEL24:CLR F0 ;CLEAR LOOP-FLAG 293 JTF LABEL26 ;JUMP IF TIME=TRUE 294 JMP LABEL28 ;JUMP IF TIME=FALSE 295 LABEL26:CPL F0 ;SET F0 IF TIME=TRUE 296 CLR A ;INDICATE TIMER OVERFLOW 297 JMP LABEL30 298 LABEL28:JNT1 LABEL30 ;JUMP IF CLOCK=HIGH 299 JNT1 LABEL28 ;REALLY CLOCK=LOW 300 CPL F0 ;SET F0 IF CLOCK=HIGH 301 LABEL30:CPL F0 ;INVERT F0 FOR TEST 302 JF0 LABEL24 ;JUMP IF TIME=FALSE AND CLOCK=HIGH 303 ; 304 STOP TCNT ;STOP TIMER 305 JNZ LABEL38 ;JUMP IF TIME=FALSE 306 ANL P1,#0FEH ;SET DATALEITUNG LOW 307 MOV A,#0FEH ;SET TIMER 100US 308 MOV T,A 309 STRT T ;START TIMER 310 LABEL32:JTF LABEL34 311 JMP LABEL32 ;WAIT 100US 312 LABEL34:STOP TCNT ;STOP TIMER 313 ORL P1,#01 ;SET DATALEITUNG HIGH 314 LABEL36:JNT1 LABEL36 ;CONTINUE IF CLOCK=HIGH 315 JNT1 LABEL36 ;REALLY CLOCK=HIGH 316 ; 317 LABEL38:MOV R0,#3FH ;REGISTER ADDRESS = 3FH 318 MOV R7,#08 ;I=8 319 LABEL40:JT1 LABEL40 ;JUMP IF CLOCK=LOW 320 JT1 LABEL40 ;REALLY CLOCK=HIGH 321 IN A,P1 ;READ DATA 322 ANL A,#08 ;MASK DATA BIT 323 MOV @R0,A ;STORE DATA BIT 324 DEC R0 ;DECREMENT REGISTER ADDRESS 325 LABEL42:JNT1 LABEL42 ;JUMP IF CLOCK=HIGH 326 JNT1 LABEL42 ;REALLY CLOCK=LOW 327 DJNZ R7,LABEL40 ;NEXT BIT 328 ; 329 ANL P1,#0FEH ;SET DATALEITUNG LOW 330 INC R0 ;INCREMENT REGISTER ADDRESS 331 MOV A,@R0 ;LOAD DATABIT 7 332 RL A 333 INC R0 334 ORL A,@R0 ;OR DATABIT 6 TO ACCU 335 RL A 336 INC R0 337 ORL A,@R0 ;OR DATABIT 5 TO ACCU 338 RL A 339 INC R0 340 ORL A,@R0 ;OR DATABIT 4 TO ACCU 341 RL A 342 INC R0 343 ORL A,@R0 ;OR DATABIT 3 TO ACCU 344 MOV R4,A 345 INC R0 346 MOV A,@R0 ;LOAD DATABIT 2 347 RL A 348 INC R0 349 ORL A,@R0 ;OR DATABIT 1 TO ACCU 350 RL A 351 INC R0 352 ORL A,@R0 ;OR DATABIT 0 TO ACCU 353 RR A 354 RR A 355 RR A 356 ORL A,R4 357 CPL A 358 MOV R4,A ;CODE IN R4 360 RET ;RETURN 369 ; 370 ; 372 ; 380 ORG 100H 382 ; 384 ; ***TRANSMIT*** 386 ; 388 TRANSMT:JT0 LABEL98 ;IF T0=1 THEN LABEL98 390 JT0 TRANSMT ;REALLY T0=0 392 LABEL62:JT1 TRANSMT ;IF T1=1 THEN LABEL60 394 JT1 LABEL62 ;REALLY T1=0 396 ; 398 ORL P1,#01 ;SET DATALEITUNG HIGH 400 MOV A,#0FDH ;SET TIMER 200US 402 MOV T,A 404 STRT T ;START TIMER 406 ; 408 LABEL64:CLR F0 ;CLEAR LOOP-FLAG 410 JTF LABEL66 ;JUMP IF TIME=TRUE 412 JMP LABEL68 ;JUMP IF TIME=FALSE 414 LABEL66:CPL F0 ;SET F0 IF TIME=TRUE 416 CLR A ;INDICATE TIMER OVERFLOW 418 JMP LABEL70 420 LABEL68:JNT1 LABEL70 ;JUMP IF CLOCK=HIGH 422 JNT1 LABEL68 ;REALLY CLOCK=LOW 424 CPL F0 ;SET F0 IF CLOCK=HIGH 426 LABEL70:CPL F0 ;INVERT F0 FOR TEST 428 JF0 LABEL64 ;JUMP IF TIME=FALSE AND CLOCK=HIGH 430 ; 432 STOP TCNT ;STOP TIMER 434 JNZ LABEL78 ;JUMP IF TIME=FALSE 436 ANL P1,#0FEH ;SET DATELEITUNG LOW 438 MOV A,#0FEH ;SET TIMER 100US 440 MOV T,A 442 STRT T ;START TIMER 444 LABEL72:JTF LABEL74 446 JMP LABEL72 ;WAIT 100US 448 LABEL74:STOP TCNT ;STOP TIMER 450 ORL P1,#01 ;SET DATALEITUNG HIGH 452 LABEL76:JNT1 LABEL76 ;CONTINUE IF CLOCK=HIGH 454 JNT1 LABEL76 ;REALLY CLOCK=HIGH 456 ; 458 LABEL78:MOV R0,#3FH ;REGISTER ADDRESS = 3FH 460 MOV R7,#08 ;I=8 462 LABEL80:JT1 LABEL80 ;JUMP IF CLOCK=LOW 464 JT1 LABEL80 ;REALLY CLOCK=HIGH 466 IN A,P1 ;READ DATA 468 ANL A,#08 ;MASK DATABIT 470 MOV @R0,A ;STORE DATABIT 472 DEC R0 ;DECREMENT REGISTER ADDRESS 474 LABEL82:JNT1 LABEL82 ;JUMP IF CLOCK=HIGH 476 JNT1 LABEL82 ;REALLY CLOCK=LOW 478 DJNZ R7,LABEL80 ;NEXT BIT 480 ; 481 INC R0 ;INCREMENT REGISTER ADDRESS 482 MOV A,@R0 ;LOAD DATABIT 7 483 RL A 484 INC R0 485 ORL A,@R0 ;OR DATABIT 6 TO ACCU 486 RL A 487 INC R0 488 ORL A,@R0 ;OR DATABIT 5 TO ACCU 489 RL A 490 INC R0 491 ORL A,@R0 ;OR DATABIT 4 TO ACCU 492 RL A 493 INC R0 494 ORL A,@R0 ;OR DATABIT 3 TO ACCU 495 MOV R4,A 496 INC R0 497 MOV A,@R0 ;LOAD DATABIT 2 498 RL A 499 INC R0 500 ORL A,@R0 ;OR DATABIT 1 TO ACCU 501 RL A 502 INC R0 503 ORL A,@R0 ;OR DATABIT 0 TO ACCU 504 RR A 505 RR A 506 RR A 507 ORL A,R4 508 CPL A 509 MOV R4,A ;CODE IN R4 510 ANL P1,#0FEH ;SET DATALEITUNG LOW 511 LABEL84:IN A,P1 ;READ BUSY 512 ; 514 JB6 LABEL84 ;WAIT IF NOT BUSY 515 LABEL86:IN A,P1 ;READ BUSY 516 JB6 LABEL86 ;REALLY BUSY 517 MOV A,R4 ;ACCU=CODE 518 ADD A,#80H 519 JNC LABEL97 ;IF CODE<128 THEN LABEL97 520 MOV A,R4 ;ACCU=CODE 521 ADD A,#40H 522 JNC LABEL87 ;IF CODE<192 THEN LABEL87 523 MOV A,R4 ;ACCU=CODE 524 ADD A,#20H 525 JNC LABEL97 ;IF CODE<224 THEN LABEL97 526 LABEL87:MOV A,#5FH 527 OUTL BUS,A ;WRITE "[164]" TO CENTRONICS 528 NOP 530 ANL P1,#7FH ;SET STROBE LOW 532 NOP 533 NOP 534 ORL P1,#80H ;SET STROBE HIGH 536 MOV A,#0FBH ;SET TIMER 500US 537 MOV T,A 538 STRT T ;START TIMER 539 LABEL88:JTF LABEL89 ; 540 JMP LABEL88 ;WAIT 500US 541 LABEL89:STOP TCNT ;STOP TIMER 546 LABEL90:IN A,P1 ;READ BUSY 548 JB6 LABEL90 ;WAIT IF NOT BUSY 549 LABEL91:IN A,P1 ;READ BUSY 550 JB6 LABEL91 ;REALLY BUSY 552 MOV A,#08 ; 554 OUTL BUS,A ;WRITE "BS" TO CENTRONICS 556 NOP 558 ANL P1,#7FH ;SET STROBE LOW 559 NOP 560 NOP 562 ORL P1,#80H ;SET STROBE HIGH 564 MOV A,#0FFH ;SET TIMER 500US 565 MOV T,A 566 STRT T ;START TIMER 567 LABEL92:JTF LABEL93 ; 568 JMP LABEL92 ;WAIT 500US 569 LABEL93:STOP TCNT ;STOP TIMER 574 LABEL94:IN A,P1 ;READ BUSY 576 JB6 LABEL94 ;WAIT IF NOT BUSY 577 LABEL95:IN A,P1 ;READ BUSY 578 JB6 LABEL95 ;REALLY BUSY 580 ; 582 LABEL97:MOV A,R4 ;ACCU=CODE 584 MOVP3 A,@A ;ASCII CODE TO ACCU 586 OUTL BUS,A ;ASCII CODE TO CENTRONICS 588 NOP 590 ANL P1,#7FH ;SET STROBE LOW 592 NOP 593 NOP 594 ORL P1,#80H ;SET STROBE HIGH 595 NOP 596 NOP 597 LABEL98:RET ;RETURN 610 ; 611 ; 612 ORG 200H 613 ; ***MAIN PROGRAM*** 614 ; 620 LABEL0: ORL P2,#0FFH ;SWITCH IN 5KOHM FOR 500NS 630 ORL P1,#0FFH ;SET PORTS 631 NOP 632 NOP 635 CLR A ;SET BUS LOW 640 OUTL BUS,A 645 LABEL2: JNT0 LABEL8 ;IF T0=0 THEN LABEL8 650 JNT0 LABEL2 ;REALLY T0=1 655 CALL COMIN ;READ IEC COMMAND 660 JF1 LABEL4 ;IF LISTEN=TRUE THEN LABEL4 665 JMP LABEL8 ;LISTEN=FALSE 670 LABEL4: CALL TRANSMT ;READ DATA BYTE FROM IEC 680 ;WRITE DATA BYTE TO CENTRONICS 690 LABEL6: JNT0 LABEL4 ;IF T0=0 THEN LABEL4 695 JNT0 LABEL6 ;REALLY T0=1 700 CALL COMIN ;READ IEC COMMAND 705 JF1 LABEL6 ;IF LISTEN=TRUE THEN LABEL6 710 ; 715 LABEL8: ANL P2,#7FH ;ENABLE POWER DOWN 720 MOV A,#0FEH ;SET TIMER 200US 725 MOV T,A 730 STRT T ;START TIMER 735 LABEL10:JTF LABEL12 740 JMP LABEL10 ;WAIT 200US 745 LABEL12:STOP TCNT ;STOP TIMER 750 JMP LABEL0 ;START AGAIN 766 ; 767 ; 768 ORG 300H 780 ; 790 ; 800 ; ***ASCII CODE TABEL*** 810 DB 00H ; 815 DB 01H ; 820 DB 02H ; 825 DB 03H ; 830 DB 04H ; 835 DB 05H ; 840 DB 06H ; 845 DB 07H ; BEL 850 DB 08H ; BS 855 DB 09H ; HT 860 DB 0AH ; LF 865 DB 0BH ; VT 870 DB 0CH ; FF 875 DB 0DH ; CR 880 DB 0EH ; 885 DB 0FH ; 900 ; 910 DB 10H ; 915 DB 11H ; DC1 920 DB 12H ; 925 DB 13H ; DC3 930 DB 14H ; 935 DB 15H ; 940 DB 16H ; 945 DB 17H ; 950 DB 18H ; CAN 955 DB 17H ; 960 DB 1AH ; 965 DB 1BH ; ESC 970 DB 1CH ; 975 DB 1DH ; 980 DB 1EH ; RS 985 DB 1FH ; US 1000 ; 1010 DB 20H 1015 DB 21H 1020 DB 22H 1025 DB 23H 1030 DB 24H 1035 DB 25H 1040 DB 26H 1045 DB 27H 1050 DB 28H 1055 DB 29H 1060 DB 2AH 1065 DB 2BH 1070 DB 2CH 1075 DB 2DH 1080 DB 2EH 1085 DB 2FH 1100 ; 1110 DB 30H ; 1115 DB 31H ; 1120 DB 32H ; 1125 DB 33H ; 1130 DB 34H ; 1135 DB 35H ; 1140 DB 36H ; 1145 DB 37H ; 1150 DB 38H ; 1155 DB 39H ; 1160 DB 3AH ; 1165 DB 3BH ; 1170 DB 3CH ; 1175 DB 3DH ; 1180 DB 3EH ; 1185 DB 3FH ; 1200 ; 1210 DB 40H 1215 DB 61H 1220 DB 62H 1225 DB 63H 1230 DB 64H 1235 DB 65H 1240 DB 66H 1245 DB 67H 1250 DB 68H 1255 DB 69H 1260 DB 6AH 1265 DB 6BH 1270 DB 6CH 1275 DB 6DH 1280 DB 6EH 1285 DB 6FH 1300 ; 1310 DB 70H ; 1315 DB 71H ; 1320 DB 72H ; 1325 DB 73H ; 1330 DB 74H ; 1335 DB 75H ; 1340 DB 76H ; 1345 DB 77H ; 1350 DB 78H ; 1355 DB 79H ; 1360 DB 7AH ; 1365 DB 5BH ; 1370 DB 5CH ; 1375 DB 5DH ; 1380 DB 5EH ; 1385 DB 5FH ; 1400 ; 1410 DB 60H 1415 DB 41H 1420 DB 42H 1425 DB 43H 1430 DB 44H 1435 DB 45H 1440 DB 46H 1445 DB 47H 1450 DB 48H 1455 DB 49H 1460 DB 4AH 1465 DB 4BH 1470 DB 4CH 1475 DB 4DH 1480 DB 4EH 1485 DB 4FH 1500 ; 1510 DB 50H ; 1515 DB 51H ; 1520 DB 52H ; 1525 DB 53H ; 1530 DB 54H ; 1535 DB 55H ; 1540 DB 56H ; 1545 DB 57H ; 1550 DB 58H ; 1555 DB 59H ; 1560 DB 5AH ; 1565 DB 7BH ; 1570 DB 7CH ; 1575 DB 7DH ; 1580 DB 7EH ; 1585 DB 7FH ; 1600 ; 1610 DB 40H 1615 DB 61H 1620 DB 62H 1625 DB 63H 1630 DB 64H 1635 DB 65H 1640 DB 66H 1645 DB 67H 1650 DB 68H 1655 DB 69H 1660 DB 6AH 1665 DB 6BH 1670 DB 6CH 1675 DB 6DH 1680 DB 6EH 1685 DB 6FH 1700 ; 1710 DB 70H ; 1715 DB 71H ; 1720 DB 72H ; 1725 DB 73H ; 1730 DB 74H ; 1735 DB 75H ; 1740 DB 76H ; 1745 DB 77H ; 1750 DB 78H ; 1755 DB 79H ; 1760 DB 7AH ; 1765 DB 5BH ; 1770 DB 5CH ; 1775 DB 5DH ; 1780 DB 5EH ; 1785 DB 5FH ; 1800 ; 1810 DB 20H 1815 DB 21H 1820 DB 22H 1825 DB 23H 1830 DB 24H 1835 DB 25H 1840 DB 26H 1845 DB 27H 1850 DB 28H 1855 DB 29H 1860 DB 2AH 1865 DB 2BH 1870 DB 2CH 1875 DB 2DH 1880 DB 2EH 1885 DB 2FH 1900 ; 1910 DB 30H ; 1915 DB 31H ; 1920 DB 32H ; 1925 DB 33H ; 1930 DB 34H ; 1935 DB 35H ; 1940 DB 36H ; 1945 DB 37H ; 1950 DB 38H ; 1955 DB 39H ; 1960 DB 3AH ; 1965 DB 3BH ; 1970 DB 3CH ; 1975 DB 3DH ; 1980 DB 3EH ; 1985 DB 3FH ; 2000 ; 2010 DB 60H 2015 DB 41H 2020 DB 42H 2025 DB 43H 2030 DB 44H 2035 DB 45H 2040 DB 46H 2045 DB 47H 2050 DB 48H 2055 DB 49H 2060 DB 4AH 2065 DB 4BH 2070 DB 4CH 2075 DB 4DH 2080 DB 4EH 2085 DB 4FH 2100 ; 2110 DB 50H ; 2115 DB 51H ; 2120 DB 52H ; 2125 DB 53H ; 2130 DB 54H ; 2135 DB 55H ; 2140 DB 56H ; 2145 DB 57H ; 2150 DB 58H ; 2155 DB 59H ; 2160 DB 5AH ; 2165 DB 7BH ; 2170 DB 7CH ; 2175 DB 7DH ; 2180 DB 7EH ; 2185 DB 7FH ; 2200 ; 2210 DB 60H 2215 DB 41H 2220 DB 42H 2225 DB 43H 2230 DB 44H 2235 DB 45H 2240 DB 46H 2245 DB 47H 2250 DB 48H 2255 DB 49H 2260 DB 4AH 2265 DB 4BH 2270 DB 4CH 2275 DB 4DH 2280 DB 4EH 2285 DB 4FH 2300 ; 2310 DB 50H ; 2315 DB 51H ; 2320 DB 52H ; 2325 DB 53H ; 2330 DB 54H ; 2335 DB 55H ; 2340 DB 56H ; 2345 DB 57H ; 2350 DB 58H ; 2355 DB 59H ; 2360 DB 5AH ; 2365 DB 7BH ; 2370 DB 7CH ; 2375 DB 7DH ; 2380 DB 7EH ; 2385 DB 7FH ;