; From Ipso Facto issue #29 May 1982 ; "Forth implementation notes, ACE" by Tony Hill, Ontario Canada ; ;******************************************************* ;* FORTH I/O CODE -FOR INTERFACE TO A RESIDENT MONITOR * ;* THIS CODE IS INTENDED TO PROVIDE AN EXAMPLE OF HOW * ;* TO INTERFACE THE I/O ROUTINES IN YOUR RESIDENT * ;* MONITOR TO FIG-FORTH. CAREFUL STUDY OF THE REGISTER * ;* USAGE OF YOUR MONITOR IS NECESSARY TO INSURE THAT * ;* ANY OF THE RESERVED FORTH REGISTERS IT USES ARE * ;* SAVED BEFORE THE MONITOR ROUTINES ARE CALLED. * ,* MODIFY THIS CODE ACCORDINGLY. * ;******************************************************* ;****************************** ;* SAMPLE INITIALIZATION CODE * ;****************************** 0000 F8 07 INIT: LDI START ; SET R(3) AS THE PC 0002 A3 PLO R3 ; 0003 F8 00 LDI #00 0005 B3 PHI R3 0006 D3 SEP R3 ; 0007 F8 XY START: LDI CALL/256 ; SET UP SCRT REGISTERS 0009 B4 PHI R4 ; R(4) AND R(5) OOOA F8 XY LDI RETURN/256 OOOC D5 PHI R5 ; ( ANY OTHER INITIALIZE OOOD F8 XZ LDI CALL ; CODE WOULD GO HERE OOOF A4 PLO R4 ; TOO ) 0010 F8 YZ LDI RETURN ; 0012 A5 PLO R5 ; 0013 30 5E BR #5E ; JUMP TO START OF FORTH ;********************************* ;* EMIT -CHARACTER OUTPUT ROUTINE ;********************************* .ORG #153D 153D 19 EMIT: INC R9 SETUP R(9) 153E E2 SEX R2 ; 153F 9A GHI RA ; EXAMPLE OF HOW TO SAVE A 1540 73 STXD ; RESERVED REGISTER IF USED 1541 8A GLO RA ; BY THE MONITOR OUTPUT ROUTINE 1542 73 STXD ; 1543 09 LDN R9 ; GET OUTPUT BYTE 1544 D4 WX ZY +CALL OUTPUT ; CALL MONITOR OUTPUT ROUTINE 1547 60 IRX ; EXAMPLE OF HOW TO RESTORE THE 1548 72 LDXA ; REGISTER SAVED AT THE START 1549 AA PLO RA ; OF THIS ROUTINE 154A F0 LDX ; l54B BA PHI RA ; 154C 29 DEC R9 ; 154D 29 DEC R9 ; CLEAN UP R(9) FOR FORTH 154E 29 DEC R9 ; 154F DC SEP RC ; RETURN TO FORTH INTERPRETER ;*************************************** ;* CR-CARRIAGE RETURN OUTPUT ROUTINE . * ;*************************************** 1550 E2 CR: SEX R2 ; 1551 9A GHI RA ; EXAMPLE OF HOW TO SAVE A 1552 73 STXD ; RESERVED REGISTER IF USED 1553 8A GLO RA ; BY THE MONITOR OUTPUT ROUTINE 1554 73 STXD ; 1555 F8 0D LDI #0D ; LOAD A CARRIAGE RETURN 1557 D4 WX ZY +CALL OUTPUT ; PASS IT TO MONITOR OUTPUT 155A F8 0A LDI #0A ; LOAD A LINE FEED 155C D4 WX ZY +CALL OUTPUT ; PASS IT TO MONITOR OUTPUT 155F 60 IRX ; EXAMPLE OF HOW TO RESTORE THE 1560 72 LDXA ; REGISTER SAVED AT THE START 1561 AA PLO RA ; OF THIS ROUTINE 1562 F0 LDX 1563 BA PHI RA 1564 DC SEP RC ;RETURN TO FORTH INTERPRETER ;********************************* ;* KEY -CHARACTER INPUT ROUTINE * ;******************************* 1565 19 KEY: INC R9 ; SET UP STORAGE AREA 1566 19 INC R9 1567 19 INC R9 1568 E2 SEX R2 ; 1569 9A GHI RA ; EXAMPLE OF HOW TO SAVE A 156A 73 STDX ;RESERVED REGISTER IF USED 156B 8A GLO RA ; BY THE MONITOR OUTPUT ROUTINE 156C 73 STXD 156D D4 ZX WY +CALL INPUT ;GET INPUT FROM MONITOR ROUTINE 1570 60 IRX ; EXAMPLE OF HOW TO roi:ESTORE THE 1571 72 LDXA ; REGISTER SAVED AT THE START 1572 AA PLO RA ; Of THIS ROUTINE 1573 F0 LDX 1574 BA PHI RA 1575 9F GHI RF ; GET BYTE PASSED BACK FROM INPUT 1576 59 STR R9 ; SAVE IT 1577 29 DEC R9 ; Cl.EAN UP STORAGE AREA 1578 F8 00 LDI #00 157A 59 STR R9 157B DC SEP RC ;*************************************** ;* QTERM -BREAK CONDITION TEST ROUTINE * ;*************************************** 157C 19 QTERM: INC R9 , SAMPLE DUMMY BREAK ROUTINE 157D 19 INC R9 ; 157E 19 INC R9 ; 157F F8 00 LDI #00 ; 1581 59 STR R9 ; 1582 29 DEC R9 , 1583 59 STR R9 ; 1584 DC SEP RC ;