User Tools

Site Tools


sd:appendix_7_kernal_functions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sd:appendix_7_kernal_functions [2026/04/14 06:09] – external edit (Unknown date) 127.0.0.1sd:appendix_7_kernal_functions [2026/04/21 12:12] (current) appledog
Line 156: Line 156:
 ;   AH=$A6-$AF: (Reserved) ;   AH=$A6-$AF: (Reserved)
 ; ;
-; === ERROR HANDLING (AH=$B0-$BF) === 
-;   AH=$B0: ERROR_SET      - Set error flag and message 
-;   AH=$B1: ERROR_GET      - Get current error code 
-;   AH=$B2: ERROR_CLEAR    - Clear error flag 
-;   AH=$B3: ERROR_PRINT    - Print error message 
-;   AH=$B4-$BF: (Reserved) 
-;; 
-; 
-; === MEMORY OPERATIONS (AH=$C0-$CF) === 
-;   AH=$C0: MEM_LOAD_BYTE   - Load byte from [addr on stack] 
-;   AH=$C1: MEM_STORE_BYTE  - Store byte to [addr on stack] 
-;   AH=$C2: MEM_LOAD_WORD   - Load word from [addr on stack] 
-;   AH=$C3: MEM_STORE_WORD  - Store word to [addr on stack] 
-;   AH=$C4: ADDR_ADD        - Pointer arithmetic (base + offset) 
-;   AH=$C5: ADDR_SCALE      - Scale index (index * size) 
-; 
-; === LOCAL VARIABLE FRAMES (AH=$D0-$DF) === 
-;   AH=$D0: FRAME_ALLOC     - Allocate stack frame 
-;   AH=$D1: FRAME_FREE      - Free stack frame 
-;   AH=$D2: LOCAL_GET       - Get local variable by offset 
-;   AH=$D3: LOCAL_SET       - Set local variable by offset 
-;   AH=$D4: PARAM_GET       - Get function parameter 
-;   AH=$D5: PARAM_SET       - Set function parameter 
-; 
-; === LOGICAL/BITWISE OPERATIONS (AH=$E0-$EF) === 
-;   AH=$E0: LOG_AND         - Logical AND (0/1 values) 
-;   AH=$E1: LOG_OR          - Logical OR (0/1 values) 
-;   AH=$E2: LOG_NOT         - Logical NOT (0/1 values) 
-;   AH=$E3: BIT_AND         - Bitwise AND 
-;   AH=$E4: BIT_OR          - Bitwise OR 
-;   AH=$E5: BIT_XOR         - Bitwise XOR 
-;   AH=$E6: BIT_NOT         - Bitwise NOT (complement) 
-;   AH=$E7: BIT_SHL         - Bitwise shift left 
-;   AH=$E8: BIT_SHR         - Bitwise shift right 
-; 
-; === TYPE CONVERSION (AH=$EA-$EF) === 
-;   AH=$EA: CONV_BYTE_WORD  - Convert byte to word (zero-extend) 
-;   AH=$EB: CONV_WORD_BYTE  - Convert word to byte (truncate) 
-;   AH=$EC: CONV_SIGNED     - Sign-extend byte to word 
- 
- 
-; === IL INTERPRETER CORE (AH=$F0-$FF) === 
-;   AH=$F0: IL_INIT        - Initialize IL interpreter 
-;   AH=$F1: IL_LOAD        - Load IL code into memory 
-;   AH=$F2: IL_FETCH       - Fetch next IL instruction 
-;   AH=$F3: IL_DISPATCH    - Dispatch IL instruction 
 ; ============================================================================ ; ============================================================================
  
Line 208: Line 162:
 ; Memory map and constants ; Memory map and constants
 ; ============================================================================ ; ============================================================================
-; *** Note: If you make changes here please reflect them in memorymap.sda 
  
 .equ PATB_TBUF          $01DB00   ; tokenizer buffer (as listed in memory map) CHECKME: not really being used? .equ PATB_TBUF          $01DB00   ; tokenizer buffer (as listed in memory map) CHECKME: not really being used?
Line 232: Line 185:
 .equ PATB_DATA_PTR      $01EEE7   ; 3 bytes - for DATA and READ statements .equ PATB_DATA_PTR      $01EEE7   ; 3 bytes - for DATA and READ statements
 .equ PATB_MS_PTR        $01EEEA   ; 3 bytes - multiline statement pointer .equ PATB_MS_PTR        $01EEEA   ; 3 bytes - multiline statement pointer
 +.equ PATB_LINE_NO       $01EEED   ; 2 bytes - current line no.
  
-; RESERVED: $01EEED-$01EEFF = 19 bytes free+; RESERVED: $01EEED-$01EEFF = 17 bytes free
  
 ; Refer to memorymap.sda if these change ; Refer to memorymap.sda if these change
 +.equ PATB_PARSEBUF      $0000D0   ; 16 bytes
 +.equ PATB_LET_NAMEBUF   $0000E0   ; 32 bytes (until $0000FF) -- just before BASIC space.
 .equ PATB_PROGRAM_BASE  $000100   ; Start of program storage (Bank 3, offset $100) .equ PATB_PROGRAM_BASE  $000100   ; Start of program storage (Bank 3, offset $100)
 .equ PATB_PROGRAM_END   $00FFFF   ; End (almost 64KB for programs) .equ PATB_PROGRAM_END   $00FFFF   ; End (almost 64KB for programs)
Line 333: Line 289:
 ; ;
 ; ============================================================================ ; ============================================================================
 +</code>
 +
 +== INT 15h - Filesystem Services
 +<code>
 +; ============================================================================
 +; INT 15h - FILE SERVICES
 +; Stream-oriented file I/O for the SD-8516 / VC-3
 +; ============================================================================
 +;
 +; Provides file and directory operations for programs.
 +;
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; NOTE: INT $15 uses a JZ-style calltable.
 +;       This means you cannot CALL into these functions by name.
 +;       You must use INT 0x15 to call them (even from the kernal).
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;
 +; Function dispatch:
 +;
 +; Group A: File Handle Operations ($00–$0F)
 +;   AH=$00: FOPEN    - Open a file (returns handle)
 +;   AH=$01: FCLOSE   - Close a file handle
 +;   AH=$02: FREAD    - Read bytes from a file
 +;   AH=$04: FWRITE   - Write bytes to a file
 +;
 +; Group B: Directory Listing ($10–$1F)
 +;   AH=$12: FLIST    - List directory contents to buffer
 +;
 +; Group C: Directory Navigation ($20–$2F)
 +;   AH=$20: FGETCWD  - Get current working directory
 +;   AH=$21: FCHDIR   - Change directory
 +;   AH=$22: FMKDIR   - Create directory
 +;   AH=$23: FRMDIR   - Remove directory
 +;
 +; ============================================================================
 +
 +; --- File Command Block (FCB) ---
 +; A shared memory region used to pass parameters to/from JavaScript.
 +; Located in bank 0 scratch space. 16 bytes.
 +;
 +.equ FS_CMD_BLOCK      $00FD00     ; Base address of command block
 +
 +.equ FS_CMD            $00FD00     ; +0: Command code (1 byte)
 +.equ FS_HANDLE         $00FD01     ; +1: File handle (1 byte, 0-7)
 +.equ FS_MODE           $00FD02     ; +2: Mode (1 byte, for fopen: 0=read, 1=write)
 +.equ FS_STATUS         $00FD03     ; +3: Result status (1 byte)
 +                                   ;     $00=ok, $01=error, $02=eof
 +.equ FS_COUNT          $00FD04     ; +4: Byte count (2 bytes, requested/returned)
 +.equ FS_ADDR           $00FD06     ; +6: 24-bit address (buffer or filename ptr)
 +.equ FS_DONE           $00FD09     ; +9: Completion flag (1 byte, 0=pending, 1=done)
 +.equ FS_EXTRA          $00FD0A     ; +10: Reserved (3 bytes) and alias for:
 +.equ FS_ADDR2          $00FD0A;    ;  +A: second 24-bit address (3 bytes)
 +
 +; --- Constants ---
 +.equ FS_MAX_HANDLES    8           ; Maximum simultaneous open files
 +
 +.equ FS_MODE_READ      0
 +.equ FS_MODE_WRITE     1
 +
 +.equ FS_OK             0
 +.equ FS_ERR            1
 +.equ FS_EOF            2
 </code> </code>
  
Line 344: Line 362:
 ;   AH=00h: reserved (for set graphics mode see int 10h ah=40h) ;   AH=00h: reserved (for set graphics mode see int 10h ah=40h)
 ;   AH=01h: Plot MODE 3 pixel (4bpp) ;   AH=01h: Plot MODE 3 pixel (4bpp)
-;   AH=02h: Plot MODE pixel (8bpp)+;   AH=02h: Plot MODE 3b pixel (8bpp)
 ;   AH=11h: Get MODE 3 pixel (4bpp) ;   AH=11h: Get MODE 3 pixel (4bpp)
-;   AH=12h: Get MODE pixel (8bpp)+;   AH=12h: Get MODE 3b pixel (8bpp)
  
 ;   AH=20h: Clear screen (fill with color) ;   AH=20h: Clear screen (fill with color)
Line 367: Line 385:
 ;   AH=50h: Scroll region ;   AH=50h: Scroll region
 ;   AH=51h: Copy region ;   AH=51h: Copy region
 +; ============================================================================
 +; Graphics Mode 3: 320x200x16 or 320x200x256
 +;   Framebuffer: Bank 2, $020000-$027CFF (32,000 bytes)
 +;   Framebuffer: Bank 2, $020000-$02F9FF (64,000 bytes) (3b)
 +;   Palettes: Bank 2, $02FA00-$02FCFF (768 bytes, RGB triplets)
 +;   Each pixel = 4 bits (colormode palettes)
 +;   Each pixel = 1 byte (palette index 0-255) (3b)
 +;   Each palette entry = 3 bytes (R, G, B, 0-255 each)
 ; ============================================================================ ; ============================================================================
 </code> </code>
sd/appendix_7_kernal_functions.1776146946.txt.gz · Last modified: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki