Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; === io.10c ===
- ; This is all the standart input / output functions avaible
- ; === Code definitons ===
- ;Clock
- #define CLOCK_ID_H 0x12d0
- #define CLOCK_ID_L 0xb402
- #define CLOCK_SET_INTERVAL 0x0000
- #define CLOCK_TIME_ELAPSED 0x0001
- #define CLOCK_TOGGLE_INTERUPTS 0x0002
- ;Floppy disk
- #define FLOPPY_ID_H 0x4fd5
- #define FLOPPY_ID_L 0x24c5
- #define FLOPPY_GET_STATE 0x0000
- #define FLOPPY_TOGGLE_INTERUPS 0x0001
- #define FLOPPY_READ 0x0002
- #define FLOPPY_WRITE 0x0003
- #define FLOPPY_STATE_NO_MEDIA 0x0000
- #define FLOPPY_STATE_READY 0x0001
- #define FLOPPY_STATE_READY_WP 0x0002
- #define FLOPPY_STATE_BUSY 0x0003
- #define FLOPPY_ERROR_NONE 0x0000
- #define FLOPPY_ERROR_BUSY 0x0001
- #define FLOPPY_ERROR_NO_MEDIA 0x0002
- #define FLOPPY_ERROR_PROTECTED 0x0003
- #define FLOPPY_ERROR_EJECT 0x0004
- #define FLOPPY_ERROR_BAD_SECTOR 0x0005
- #define FLOPPY_ERROR_BROKEN 0xFFFF
- ;Keyboard
- #define KEYBOARD_ID_H 0x30cf
- #define KEYBOARD_ID_L 0x7406
- #define KEYBOARD_CLEAR_BUFFER 0x0000
- #define KEYBOARD_STORE_KEY 0x0001
- #define KEYBOARD_KEY_PRESSED 0x0002
- #define KEYBOARD_TOGGLE_INTERUPTS 0x0003
- #define KEYBOARD_KEY_BACKSPACE 0x0010
- #define KEYBOARD_KEY_RETURN 0x0011
- #define KEYBOARD_KEY_INSERT 0x0012
- #define KEYBOARD_KEY_DELETE 0x0013
- #define KEYBOARD_KEY_ARROW_UP 0x0080
- #define KEYBOARD_KEY_ARROW_DOWN 0x0081
- #define KEYBOARD_KEY_ARROW_LEFT 0x0082
- #define KEYBOARD_KEY_ARROW_RIGHT 0x0083
- #define KEYBOARD_KEY_SHIFT 0x0090
- #define KEYBOARD_KEY_CONTROL 0x0081
- ;Monitor
- #define MONITOR_ID_H 0x7349
- #define MONITOR_ID_L 0xf615
- #define MONITOR_MEM_MAP_SCREEN 0x0000
- #define MONITOR_MEM_MAP_FONT 0x0001
- #define MONITOR_MEM_MAP_PALETTE 0x0002
- #define MONITOR_SET_BORDER_COLOR 0x0003
- #define MONITOR_MEM_DUMP_FONT 0x0004
- #define MONITOR_MEM_DUMP_PALETTE 0x0005
- #define MONITOR_SCREEN_RAM_SIZE 0x0180
- #define MOIITOR_FONT_RAM_SIZE 0x0100
- #define MONITOR_PALETTE_RAM_SIZE 0x000F
- #define MONITOR_WIDTH 0x0080
- #define MONITOR_HEIGHT 0x0060
- ;Colours
- #define COLOUR_BLACK 0x0000
- #define COLOUR_DARK_BLUE 0x1000
- #define COLOUR_DARK_GREEN 0x2000
- #define COLOUR_DARK_CYAN 0x3000
- #define COLOUR_DARK_RED 0x4000
- #define COLOUR_DARK_PINK 0x5000
- #define COLOUR_DARK_YELLOW 0x6000
- #define COLOUR_LIGHT_GREY 0x7000
- #define COLOUR_GREY 0x8000
- #define COLOUR_BLUE 0x9000
- #define COLOUR_GREEN 0xA000
- #define COLOUR_CYAN 0xB000
- #define COLOUR_RED 0xC000
- #define COLOUR_PINK 0xD000
- #define COLOUR_YELLOW 0xE000
- #define COLOUR_WHITE 0xF000
- ;Sleep chamber
- #define CHAMBER_ID_H 0x40e4
- #define CHAMBER_ID_L 0x1d9d
- #define CHAMBER_GET_STATUS 0x0000
- #define CHAMBER_SET_UNITS_TO_SKIP 0x0001
- #define CHAMBER_TRIGGER_DEVICE 0x0002
- #define CHAMBER_SET_SKIP_UNIT 0x0003
- #define CHAMBER_STATUS_EVACUATE 0x0000
- #define CHAMBER_STATUS_NOT_IN_VACUUM 0x0001
- #define CHAMBER_STATUS_NOT_ENOUGH_FUEL 0x0002
- #define CHAMBER_STATUS_BAD_GRAVITY_FIELD 0x0003
- #define CHAMBER_STATUS_BAD_ANGULAR_MOMENTUM 0x0004
- #define CHAMBER_STATUS_OPEN_DOOR 0x0005
- #define CHAMBER_STATUS_MECHANICAL_ERROR 0x0006
- #define CHAMBER_STATUS_UNKOWN_ERROR 0xFFFF
- #define CHAMBER_UNIT_MILISECONDS 0x0000
- #define CHAMBER_UNIT_MINUTES 0x0001
- #define CHAMBER_UNIT_DAYS 0x0002
- #define CHAMBER_UNIT_YEARS 0x0003
- ;Vector display ( SPED )
- #define SPED_ID_H 0x42ba
- #define SPED_ID_L 0xbf3c
- #define SPED_GET_STATE 0x0000
- #define SPED_MAP_MEMORY 0x0001
- #define SPED_ROTATE_DEVICE 0x0003
- #define SPED_STATE_NO_DATA 0x0000
- #define SPED_STATE_RUNNING 0x0001
- #define SPED_STATE_TURNING 0x0002
- #define SPED_ERROR_NONE 0x0000
- #define SPED_ERROR_BROKEN 0xFFFF
- ;Manufactorers
- #define MACKAPAR_H 0x1eb3
- #define MACKAPAR_L 0x7e91
- #define NYA_ELEKTRISKA_H 0x1c6c
- #define NYA_ELECTRISKA_L 0x8b36
- ;Io constants
- #define DEFUALT_STDOUT_SCREEN_ADDRESS 0xB000
- ; === Marcos ===
- #macro func(){ ;Setup for a function with local stack variables
- set push,sp
- }
- #macro ret( n ){ ;Return from a function with N amount of local stack variables
- set sp,pick n
- set pc,pop
- }
- #macro leave(){ ;Leave from a function / routine without stack variables
- set pc,pop
- }
- #macro store( n ){ ;Store an address or register
- set push,n
- }
- #macro restore( n ){
- set n,pop
- }
- #macro store_regs(){
- store A
- store B
- store C
- store X
- store Y
- store Z
- store I
- store J
- }
- #macro restore_regs(){
- restore A
- restore B
- restore C
- restore X
- restore Y
- restore Z
- restore I
- restore J
- }
- #macro declare( n ){ ;Declare a dynamic local variable( Keeps track of the number of delcared variables )
- add z,n
- set j,n
- set i,0
- set a,sp
- ._ll
- store 0
- add i,1
- ifn i,j
- set pc,_ll
- }
- #macro define( n , m ){ ;Declares as declare does, but also sets the value(s)
- add z,n
- set j,n
- set i,0
- set a,sp
- ._ll
- store i+m
- add i,1
- ifn i,j
- set pc,_ll
- }
- #macro finish(){ ;Clear the stack from the dynamicly defined variables
- ret z
- }
- #macro goto( n ){
- set pc,n
- }
- ; === Code ===
- ;MEM MAP
- ; 0x0000 -> 0x9FFF code
- ; 0xA000 -> 0xAFFF web io
- ; 0xB000 -> 0xB179 screen ram
- ; 0xB180 -> 0x???? mem table
- ; 0x???? <- 0xFFFF stack
- ;
- :io_datatable
- :io_stdout dat 0
- :io_stdin dat 0
- :io_hcount dat 0
- :io_stdout_pos dat 0
- :io_stdcolour dat COLOUR_LIGHT_GREY
- :io_init
- ;; io_init()
- ;; Initializes monitor and keyboard if present
- func
- set [sys_io],io_datatable
- jsr io_check
- set a,MONITOR_ID_H
- set b,MONITOR_ID_L
- jsr io_query
- set [io_stdout],a
- set a,KEYBOARD_ID_H
- set b,KEYBOARD_ID_L
- jsr io_query
- set [io_stdin],a
- jsr io_startScreen
- ret 0
- :io_check
- ;; io_check()
- ;; Returns the number of hardware devices connected, and stores it in 'io_hcount' too.
- hwn a
- set [io_hcount],a
- leave
- :io_query
- func
- store a
- store b
- set j,[io_hcount]
- set i,0
- ._queryLoop
- hwq i
- ife a,peek
- ife b,pick 1
- goto _querySuccess
- add i,1
- ifn i,j
- goto _queryLoop
- ._querySuccess
- set a,i
- ret 2
- :io_startScreen
- set a,0
- set b,DEFUALT_STDOUT_SCREEN_ADDRESS
- hwi [io_stdout]
- leave
- :io_print
- ife b,0
- set b,[io_stdcolour]
- ._printLoop
- set i,[a]
- ife i,0
- leave
- ife i,0x0A
- goto _printNewline
- bor i,b
- set j,[io_stdout_pos]
- set [j+DEFUALT_STDOUT_SCREEN_ADDRESS],i
- add a,1
- add [io_stdout_pos],1
- goto _printLoop
- ._printNewline
- set c,[io_stdout_pos]
- mod c,32
- ife c,0
- goto _en
- set i,32
- sub i,c
- add [io_stdout_pos],i
- ._en
- add a,1
- goto _printLoop
- :io_printstd
- set b,[io_stdcolour]
- jsr io_print
- leave
- :io_putchar
- ife b,0
- set b,[io_stdcolour]
- set i,y
- mul i,MONITOR_WIDTH
- add i,x
- bor a,b
- set [i+DEFUALT_STDOUT_SCREEN_ADDRESS],a
- leave
- :io_getchar
- store c
- set a,KEYBOARD_STORE_KEY
- hwi [io_stdin]
- set a,c
- restore c
- leave
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement