|
2 | 2 | ; Title: BBC Basic for AGON |
3 | 3 | ; Author: Dean Belfield |
4 | 4 | ; Created: 03/05/2022 |
5 | | -; Last Updated: 02/04/2023 |
| 5 | +; Last Updated: 16/04/2023 |
6 | 6 | ; |
7 | 7 | ; Modinfo: |
8 | 8 | ; 24/07/2022: OSWRCH and OSRDCH now execute code in MOS |
|
25 | 25 | ; 25/03/2023: Fixed range error in OSBYTE, now calls VBLANK_INIT in OSINIT, improved keyboard handling |
26 | 26 | ; 28/03/2023: Improved BYE command |
27 | 27 | ; 02/04/2023: Various keyboard tweaks |
| 28 | +; 16/04/2023: Implemented GETPTR, PUTPTR, GETEXT |
28 | 29 | |
29 | 30 | .ASSUME ADL = 0 |
30 | 31 | |
@@ -404,7 +405,7 @@ STAR_BYE: CALL VBLANK_STOP ; Restore MOS interrupts |
404 | 405 | ; *VERSION |
405 | 406 | ; |
406 | 407 | STAR_VERSION: CALL TELL ; Output the welcome message |
407 | | - DB "BBC BASIC (Agon) Version 1.04 RC3\n\r",0 |
| 408 | + DB "BBC BASIC (Agon) Version 1.04 RC4\n\r",0 |
408 | 409 | RET |
409 | 410 | |
410 | 411 | ; *EDIT linenum |
@@ -861,22 +862,52 @@ OSSTAT: PUSH BC |
861 | 862 | ; DEHL = pointer (0-&7FFFFF) |
862 | 863 | ; Destroys: A,B,C,D,E,H,L,F |
863 | 864 | ; |
864 | | -GETPTR: RET |
| 865 | +GETPTR: PUSH IY |
| 866 | + LD C, E |
| 867 | + MOSCALL mos_getfil ; HLU: Pointer to FIL structure |
| 868 | + PUSH.LIL HL |
| 869 | + POP.LIL IY ; IYU: Pointer to FIL structure |
| 870 | + LD.LIL L, (IY + FIL.fptr + 0) |
| 871 | + LD.LIL H, (IY + FIL.fptr + 1) |
| 872 | + LD.LIL E, (IY + FIL.fptr + 2) |
| 873 | + LD.LIL D, (IY + FIL.fptr + 3) |
| 874 | + POP IY |
| 875 | + RET |
865 | 876 |
|
866 | 877 | ; PUTPTR - Update file pointer. |
867 | 878 | ; A = file channel |
868 | 879 | ; DEHL = new pointer (0-&7FFFFF) |
869 | 880 | ; Destroys: A,B,C,D,E,H,L,F |
870 | 881 | ; |
871 | | -PUTPTR: RET |
| 882 | +PUTPTR: PUSH IY |
| 883 | + LD C, A ; C: Filehandle |
| 884 | + PUSH.LIL HL |
| 885 | + LD.LIL HL, 2 |
| 886 | + ADD.LIL HL, SP |
| 887 | + LD.LIL (HL), E ; 3rd byte of DWORD set to E |
| 888 | + POP.LIL HL |
| 889 | + LD E, D ; 4th byte passed as E |
| 890 | + MOSCALL mos_flseek |
| 891 | + POP IY |
| 892 | + RET |
872 | 893 | |
873 | 894 | ; GETEXT - Find file size. |
874 | 895 | ; E = file channel |
875 | 896 | ; Returns: |
876 | 897 | ; DEHL = file size (0-&800000) |
877 | 898 | ; Destroys: A,B,C,D,E,H,L,F |
878 | 899 | ; |
879 | | -GETEXT: RET |
| 900 | +GETEXT: PUSH IY |
| 901 | + LD C, E |
| 902 | + MOSCALL mos_getfil ; HLU: Pointer to FIL structure |
| 903 | + PUSH.LIL HL |
| 904 | + POP.LIL IY ; IYU: Pointer to FIL structure |
| 905 | + LD.LIL L, (IY + FIL.obj.objsize + 0) |
| 906 | + LD.LIL H, (IY + FIL.obj.objsize + 1) |
| 907 | + LD.LIL E, (IY + FIL.obj.objsize + 2) |
| 908 | + LD.LIL D, (IY + FIL.obj.objsize + 3) |
| 909 | + POP IY |
| 910 | + RET |
880 | 911 |
|
881 | 912 | ; GETIMS - Get time from RTC |
882 | 913 | ; |
|
0 commit comments