📄 basic-52.lst
字号:
1216: ;
1217:
1218: ;END
1219: ;$INCLUDE(:F2:BAS52.PGM)
1220: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 31
Line I Addr Code Source
1221: ;**************************************************************
1222: ;
1223: 050C PGU: ;PROGRAM A PROM FOR THE USER
1224: ;
1225: ;**************************************************************
1226: ;
1227: 050C C2 95 CLR PROMV ;TURN ON THE VOLTAGE
1228: 050E 75 D0 18 MOV PSW,#00011000B ;SELECT RB3
1229: 0511 91 95 ACALL PG1 ;DO IT
1230: 0513 D2 95 SETB PROMV ;TURN IT OFF
1231: 0515 22 RET
1232: ;
1233: ;
1234: ;*************************************************************
1235: ;
1236: 0516 CCAL: ; Set up for prom moves
1237: ; R3:R1 gets source
1238: ; R7:R6 gets # of bytes
1239: ;
1240: ;*************************************************************
1241: ;
1242: 0516 B1 82 ACALL GETEND ;GET THE LAST LOCATION
1243: 0518 A3 INC DPTR ;BUMP TO LOAD EOF
1244: 0519 AB 13 MOV R3,BOFAH
1245: 051B A9 14 MOV R1,BOFAL ;RESTORE START
1246: 051D C3 CLR C ;PREPARE FOR SUBB
1247: 051E E5 82 MOV A,DPL ;SUB DPTR - BOFA > R7:R6
1248: 0520 99 SUBB A,R1
1249: 0521 FE MOV R6,A
1250: 0522 E5 83 MOV A,DPH
1251: 0524 9B SUBB A,R3
1252: 0525 FF MOV R7,A
1253: 0526 22 RET
1254: ;
1255: ;
1256: ;$INCLUDE(:F2:BAS52.TL)
1257: ;BEGINNING
1258:
1259: ;**************************************************************
1260: ;
1261: 0527 TIMER_LOAD:; Load the timer
1262: ;
1263: ;*************************************************************
1264: ;
1265: 0527 B1 26 ACALL $-1 ;DELAY FOUR CLOCKS
1266: 0529 C2 8E CLR TR1 ;STOP IT WHILE IT'S LOADED
1267: 052B 85 40 8D MOV TH1,T_HH
1268: 052E 85 41 8B MOV TL1,T_LL
1269: 0531 C2 8F CLR TF1 ;CLEAR THE OVERFLOW FLAG
1270: 0533 D2 8E SETB TR1 ;START IT NOW
1271: 0535 22 RET
1272: ;
1273:
1274: ;END
1275: ;$INCLUDE(:F2:BAS52.TL)
1276: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 32
Line I Addr Code Source
1277: ;***************************************************************
1278: ;
1279: 0536 CROM: ; The command action routine - ROM - Run out of rom
1280: ;
1281: ;***************************************************************
1282: ;
1283: 0536 C2 17 CLR CONB ;CAN'T CONTINUE IF MODE CHANGE
1284: 0538 B1 3D ACALL RO1 ;DO IT
1285: ;
1286: 053A 02 10 7E C_K: LJMP CL3 ;EXIT
1287: ;
1288: 053D 12 0F 3E RO1: CALL INTGER ;SEE IF INTGER PRESENT
1289: 0540 AC 00 MOV R4,R0B0 ;SAVE THE NUMBER
1290: 0542 50 02 JNC $+4
1291: 0544 7C 01 MOV R4,#01H ;ONE IF NO INTEGER PRESENT
1292: 0546 B1 53 ACALL ROMFD ;FIND THE PROGRAM
1293: 0548 BC 00 11 CJNE R4,#0,RFX ;EXIT IF R4 <> 0
1294: 054B A3 INC DPTR ;BUMP PAST TAG
1295: 054C 85 83 13 MOV BOFAH,DPH ;SAVE THE ADDRESS
1296: 054F 85 82 14 MOV BOFAL,DPL
1297: 0552 22 RET
1298: ;
1299: 0553 90 80 10 ROMFD: MOV DPTR,#ROMADR+16 ;START OF USER PROGRAM
1300: ;
1301: 0556 E0 RF1: MOVX A,@DPTR ;GET THE BYTE
1302: 0557 B4 55 09 CJNE A,#55H,RF3 ;SEE IF PROPER TAG
1303: 055A DC 01 DJNZ R4,RF2 ;BUMP COUNTER
1304: ;
1305: 055C 22 RFX: RET ;DPTR HAS THE START ADDRESS
1306: ;
1307: 055D A3 RF2: INC DPTR ;BUMP PAST TAG
1308: 055E B1 A4 ACALL G5
1309: 0560 A3 INC DPTR ;BUMP TO NEXT PROGRAM
1310: 0561 80 F3 SJMP RF1 ;DO IT AGAIN
1311: ;
1312: 0563 10 1D F6 RF3: JBC INBIT,RFX ;EXIT IF SET
1313: ;
1314: 0566 90 1F C9 NOGO: MOV DPTR,#NOROM
1315: 0569 81 D3 AJMP ERRLK
1316: ;
1317: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 33
Line I Addr Code Source
1318: ;***************************************************************
1319: ;
1320: 056B L20DPI: ; load R2:R0 with the location the DPTR is pointing to
1321: ;
1322: ;***************************************************************
1323: ;
1324: 056B E0 MOVX A,@DPTR
1325: 056C FA MOV R2,A
1326: 056D A3 INC DPTR
1327: 056E E0 MOVX A,@DPTR
1328: 056F F8 MOV R0,A
1329: 0570 22 RET ;DON'T BUMP DPTR
1330: ;
1331: ;***************************************************************
1332: ;
1333: 0571 X31DP: ; swap R3:R1 with DPTR
1334: ;
1335: ;***************************************************************
1336: ;
1337: 0571 CB XCH A,R3
1338: 0572 C5 83 XCH A,DPH
1339: 0574 CB XCH A,R3
1340: 0575 C9 XCH A,R1
1341: 0576 C5 82 XCH A,DPL
1342: 0578 C9 XCH A,R1
1343: 0579 22 RET
1344: ;
1345: ;***************************************************************
1346: ;
1347: 057A LD_T: ; Load the timer save location with the value the DPTR is
1348: ; pointing to.
1349: ;
1350: ;****************************************************************
1351: ;
1352: 057A E0 MOVX A,@DPTR
1353: 057B F5 40 MOV T_HH,A
1354: 057D A3 INC DPTR
1355: 057E E0 MOVX A,@DPTR
1356: 057F F5 41 MOV T_LL,A
1357: 0581 22 RET
1358: ;
1359: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 34
Line I Addr Code Source
1360: ;
1361: ;***************************************************************
1362: ;
1363: ;GETLIN - FIND THE LOCATION OF THE LINE NUMBER IN R3:R1
1364: ; IF ACC = 0 THE LINE WAS NOT FOUND I.E. R3:R1
1365: ; WAS TOO BIG, ELSE ACC <> 0 AND THE DPTR POINTS
1366: ; AT THE LINE THAT IS GREATER THAN OR EQUAL TO THE
1367: ; VALUE IN R3:R1.
1368: ;
1369: ;***************************************************************
1370: ;
1371: 0582 D2 29 GETEND: SETB ENDBIT ;GET THE END OF THE PROGRAM
1372: ;
1373: 0584 12 0E A4 GETLIN: CALL DP_B ;GET BEGINNING ADDRESS
1374: ;
1375: 0587 12 0A AC G1: CALL B_C
1376: 058A 60 12 JZ G3 ;EXIT WITH A ZERO IN A IF AT END
1377: 058C A3 INC DPTR ;POINT AT THE LINE NUMBER
1378: 058D 20 29 0A JB ENDBIT,G2 ;SEE IF WE WANT TO FIND THE END
1379: 0590 B1 C4 ACALL DCMPX ;SEE IF (DPTR) = R3:R1
1380: 0592 B1 BA ACALL DECDP ;POINT AT LINE COUNT
1381: 0594 E0 MOVX A,@DPTR ;PUT LINE LENGTH INTO ACC
1382: 0595 20 2A 06 JB UBIT,G3 ;EXIT IF EQUAL
1383: 0598 40 04 JC G3 ;SEE IF LESS THAN OR ZERO
1384: ;
1385: 059A B1 D6 G2: ACALL ADDPTR ;ADD IT TO DPTR
1386: 059C 80 E9 SJMP G1 ;LOOP
1387: ;
1388: 059E C2 29 G3: CLR ENDBIT ;RESET ENDBIT
1389: 05A0 22 RET ;EXIT
1390: ;
1391: 05A1 90 02 00 G4: MOV DPTR,#PSTART ;DO RAM
1392: ;
1393: 05A4 D2 29 G5: SETB ENDBIT
1394: 05A6 80 DF SJMP G1 ;NOW DO TEST
1395: ;
1396: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 35
Line I Addr Code Source
1397: ;***************************************************************
1398: ;
1399: ; LDPTRI - Load the DATA POINTER with the value it is pointing
1400: ; to - DPH = (DPTR) , DPL = (DPTR+1)
1401: ;
1402: ; acc gets wasted
1403: ;
1404: ;***************************************************************
1405: ;
1406: 05A8 E0 LDPTRI: MOVX A,@DPTR ;GET THE HIGH BYTE
1407: 05A9 C0 E0 PUSH ACC ;SAVE IT
1408: 05AB A3 INC DPTR ;BUMP THE POINTER
1409: 05AC E0 MOVX A,@DPTR ;GET THE LOW BYTE
1410: 05AD F5 82 MOV DPL,A ;PUT IT IN DPL
1411: 05AF D0 83 POP DPH ;GET THE HIGH BYTE
1412: 05B1 22 RET ;GO BACK
1413: ;
1414: ;***************************************************************
1415: ;
1416: ;L31DPI - LOAD R3 WITH (DPTR) AND R1 WITH (DPTR+1)
1417: ;
1418: ;ACC GETS CLOBBERED
1419: ;
1420: ;***************************************************************
1421: ;
1422: 05B2 E0 L31DPI: MOVX A,@DPTR ;GET THE HIGH BYTE
1423: 05B3 FB MOV R3,A ;PUT IT IN THE REG
1424: 05B4 A3 INC DPTR ;BUMP THE POINTER
1425: 05B5 E0 MOVX A,@DPTR ;GET THE NEXT BYTE
1426: 05B6 F9 MOV R1,A ;SAVE IT
1427: 05B7 22 RET
1428: ;
1429: ;***************************************************************
1430: ;
1431: ;DECDP - DECREMENT THE DATA POINTER - USED TO SAVE SPACE
1432: ;
1433: ;***************************************************************
1434: ;
1435: 05B8 B1 BA DECDP2: ACALL DECDP
1436: ;
1437: 05BA C5 82 DECDP: XCH A,DPL ;GET DPL
1438: 05BC 70 02 JNZ $+4 ;BUMP IF ZERO
1439: 05BE 15 83 DEC DPH
1440: 05C0 14 DEC A ;DECREMENT IT
1441: 05C1 C5 82 XCH A,DPL ;GET A BACK
1442: 05C3 22 RET ;EXIT
1443: ;
1444: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 36
Line I Addr Code Source
1445: ;***************************************************************
1446: ;
1447: ;DCMPX - DOUBLE COMPARE - COMPARE (DPTR) TO R3:R1
1448: ;R3:R1 - (DPTR) = SET CARRY FLAG
1449: ;
1450: ;IF R3:R1 > (DPTR) THEN C = 0
1451: ;IF R3:R1 < (DPTR) THEN C = 1
1452: ;IF R3:R1 = (DPTR) THEN C = 0
1453: ;
1454: ;***************************************************************
1455: ;
1456: 05C4 C2 2A DCMPX: CLR UBIT ;ASSUME NOT EQUAL
1457: 05C6 E0 MOVX A,@DPTR ;GET THE BYTE
1458: 05C7 B5 03 0A CJNE A,R3B0,D1 ;IF A IS GREATER THAN R3 THEN NO CARRY
1459: ;WHICH IS R3<@DPTR = NO CARRY AND
1460: ;R3>@DPTR CARRY IS SET
1461: 05CA A3 INC DPTR ;BUMP THE DATA POINTER
1462: 05CB E0 MOVX A,@DPTR ;GET THE BYTE
1463: 05CC B1 BA ACALL DECDP ;PUT DPTR BACK
1464: 05CE B5 01 03 CJNE A,R1B0,D1 ;DO THE COMPARE
1465: 05D1 B3 CPL C ;FLIP CARRY
1466: ;
1467: 05D2 B2 2A CPL UBIT ;SET IT
1468: 05D4 B3 D1: CPL C ;GET THE CARRY RIGHT
1469: 05D5 22 RET ;EXIT
1470: ;
1471: ;***************************************************************
1472: ;
1473: ; ADDPTR - Add acc to the dptr
1474: ;
1475: ; acc gets wasted
1476: ;
1477: ;***************************************************************
1478: ;
1479: 05D6 25 82 ADDPTR: ADD A,DPL ;ADD THE ACC TO DPL
1480: 05D8 F5 82 MOV DPL,A ;PUT IT IN DPL
1481: 05DA 50 02 JNC $+4 ;JUMP IF NO CARRY
1482: 05DC 05 83 INC DPH ;BUMP DPH
1483: 05DE 22 RET ;EXIT
1484: ;
1485: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 37
Line I Addr Code Source
1486: ;*************************************************************
1487: ;
1488: 05DF LCLR: ; Set up the storage allocation
1489: ;
1490: ;*************************************************************
1491: ;
1492: 05DF D1 92 ACALL ICLR ;CLEAR THE INTERRUPTS
1493: 05E1 B1 A1 ACALL G4 ;PUT END ADDRESS INTO DPTR
1494: 05E3 74 06 MOV A,#6 ;ADJUST MATRIX SPACE
1495: 05E5 B1 D6 ACALL ADDPTR ;ADD FOR PROPER BOUNDS
1496: 05E7 B1 71 ACALL X31DP ;PUT MATRIX BOUNDS IN R3:R1
1497: 05E9 90 01 08 MOV DPTR,#MT_ALL ;SAVE R3:R1 IN MATRIX FREE SPACE
1498: 05EC B1 FD ACALL S31DP ;DPTR POINTS TO MEMTOP
1499: 05EE B1 B2 ACALL L31DPI ;LOAD MEMTOP INTO R3:R1
1500: 05F0 90 01 22 MOV DPTR,#STR_AL ;GET MEMORY ALLOCATED FOR STRINGS
1501: 05F3 B1 A8 ACALL LDPTRI
1502: 05F5 12 0A 0A CALL DUBSUB ;R3:R1 = MEMTOP - STRING ALLOCATION
1503: 05F8 90 01 04 MOV DPTR,#VARTOP ;SAVE R3:R1 IN VARTOP
1504: ;
1505: ; FALL THRU TO S31DP2
1506: ;
1507: ;***************************************************************
1508: ;
1509: ;S31DP - STORE R3 INTO (DPTR) AND R1 INTO (DPTR+1)
1510: ;
1511: ;ACC GETS CLOBBERED
1512: ;
1513: ;***************************************************************
1514: ;
1515: 05FB B1 FD S31DP2: ACALL S31DP ;DO IT TWICE
1516: ;
1517: 05FD EB S31DP: MOV A,R3 ;GET R3 INTO ACC
1518: 05FE F0 MOVX @DPTR,A ;STORE IT
1519: 05FF A3 INC DPTR ;BUMP DPTR
1520: 0600 E9 MOV A,R1 ;GET R1
1521: 0601 F0 MOVX @DPTR,A ;STORE IT
1522: 0602 A3 INC DPTR ;BUMP IT AGAIN TO SAVE PROGRAM SPACE
1523: 0603 22 RET ;GO BACK
1524: ;
1525: ;
1526: ;***************************************************************
1527: ;
1528: 0604 STRING: ; Allocate memory for strings
1529: ;
1530
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -