|
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