SHARE
TWEET

io.10c

a guest Dec 26th, 2013 210 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; === io.10c ===
  2. ; This is all the standart input / output functions avaible
  3.  
  4.  
  5. ; === Code definitons ===
  6. ;Clock
  7. #define CLOCK_ID_H                                                      0x12d0
  8. #define CLOCK_ID_L                                                      0xb402
  9. #define CLOCK_SET_INTERVAL                                      0x0000
  10. #define CLOCK_TIME_ELAPSED                                      0x0001
  11. #define CLOCK_TOGGLE_INTERUPTS                          0x0002
  12. ;Floppy disk                                   
  13. #define FLOPPY_ID_H                                                     0x4fd5
  14. #define FLOPPY_ID_L                                                     0x24c5
  15. #define FLOPPY_GET_STATE                                        0x0000
  16. #define FLOPPY_TOGGLE_INTERUPS                          0x0001
  17. #define FLOPPY_READ                                                     0x0002
  18. #define FLOPPY_WRITE                                            0x0003
  19. #define FLOPPY_STATE_NO_MEDIA                           0x0000
  20. #define FLOPPY_STATE_READY                                      0x0001
  21. #define FLOPPY_STATE_READY_WP                           0x0002
  22. #define FLOPPY_STATE_BUSY                                       0x0003
  23. #define FLOPPY_ERROR_NONE                                       0x0000
  24. #define FLOPPY_ERROR_BUSY                                       0x0001
  25. #define FLOPPY_ERROR_NO_MEDIA                           0x0002
  26. #define FLOPPY_ERROR_PROTECTED                          0x0003
  27. #define FLOPPY_ERROR_EJECT                                      0x0004
  28. #define FLOPPY_ERROR_BAD_SECTOR                         0x0005
  29. #define FLOPPY_ERROR_BROKEN                                     0xFFFF
  30. ;Keyboard                                      
  31. #define KEYBOARD_ID_H                                           0x30cf
  32. #define KEYBOARD_ID_L                                           0x7406
  33. #define KEYBOARD_CLEAR_BUFFER                           0x0000
  34. #define KEYBOARD_STORE_KEY                                      0x0001
  35. #define KEYBOARD_KEY_PRESSED                            0x0002
  36. #define KEYBOARD_TOGGLE_INTERUPTS                       0x0003
  37. #define KEYBOARD_KEY_BACKSPACE                          0x0010
  38. #define KEYBOARD_KEY_RETURN                                     0x0011
  39. #define KEYBOARD_KEY_INSERT                                     0x0012
  40. #define KEYBOARD_KEY_DELETE                                     0x0013
  41. #define KEYBOARD_KEY_ARROW_UP                           0x0080
  42. #define KEYBOARD_KEY_ARROW_DOWN                         0x0081
  43. #define KEYBOARD_KEY_ARROW_LEFT                         0x0082
  44. #define KEYBOARD_KEY_ARROW_RIGHT                        0x0083
  45. #define KEYBOARD_KEY_SHIFT                                      0x0090
  46. #define KEYBOARD_KEY_CONTROL                            0x0081
  47. ;Monitor                                       
  48. #define MONITOR_ID_H                                            0x7349
  49. #define MONITOR_ID_L                                            0xf615
  50. #define MONITOR_MEM_MAP_SCREEN                          0x0000
  51. #define MONITOR_MEM_MAP_FONT                            0x0001
  52. #define MONITOR_MEM_MAP_PALETTE                         0x0002
  53. #define MONITOR_SET_BORDER_COLOR                        0x0003
  54. #define MONITOR_MEM_DUMP_FONT                           0x0004
  55. #define MONITOR_MEM_DUMP_PALETTE                        0x0005
  56. #define MONITOR_SCREEN_RAM_SIZE                         0x0180
  57. #define MOIITOR_FONT_RAM_SIZE                           0x0100
  58. #define MONITOR_PALETTE_RAM_SIZE                        0x000F
  59. #define MONITOR_WIDTH                                           0x0080
  60. #define MONITOR_HEIGHT                                          0x0060
  61. ;Colours
  62. #define COLOUR_BLACK                                            0x0000
  63. #define COLOUR_DARK_BLUE                                        0x1000
  64. #define COLOUR_DARK_GREEN                                       0x2000
  65. #define COLOUR_DARK_CYAN                                        0x3000
  66. #define COLOUR_DARK_RED                                         0x4000
  67. #define COLOUR_DARK_PINK                                        0x5000
  68. #define COLOUR_DARK_YELLOW                                      0x6000
  69. #define COLOUR_LIGHT_GREY                                       0x7000
  70. #define COLOUR_GREY                                                     0x8000
  71. #define COLOUR_BLUE                                                     0x9000
  72. #define COLOUR_GREEN                                            0xA000
  73. #define COLOUR_CYAN                                                     0xB000
  74. #define COLOUR_RED                                                      0xC000
  75. #define COLOUR_PINK                                                     0xD000
  76. #define COLOUR_YELLOW                                           0xE000
  77. #define COLOUR_WHITE                                            0xF000
  78. ;Sleep chamber
  79. #define CHAMBER_ID_H                                            0x40e4
  80. #define CHAMBER_ID_L                                            0x1d9d
  81. #define CHAMBER_GET_STATUS                                      0x0000
  82. #define CHAMBER_SET_UNITS_TO_SKIP                       0x0001
  83. #define CHAMBER_TRIGGER_DEVICE                          0x0002
  84. #define CHAMBER_SET_SKIP_UNIT                           0x0003
  85. #define CHAMBER_STATUS_EVACUATE                         0x0000
  86. #define CHAMBER_STATUS_NOT_IN_VACUUM            0x0001
  87. #define CHAMBER_STATUS_NOT_ENOUGH_FUEL          0x0002
  88. #define CHAMBER_STATUS_BAD_GRAVITY_FIELD        0x0003
  89. #define CHAMBER_STATUS_BAD_ANGULAR_MOMENTUM     0x0004
  90. #define CHAMBER_STATUS_OPEN_DOOR                        0x0005
  91. #define CHAMBER_STATUS_MECHANICAL_ERROR         0x0006
  92. #define CHAMBER_STATUS_UNKOWN_ERROR                     0xFFFF
  93. #define CHAMBER_UNIT_MILISECONDS                        0x0000
  94. #define CHAMBER_UNIT_MINUTES                            0x0001
  95. #define CHAMBER_UNIT_DAYS                                       0x0002
  96. #define CHAMBER_UNIT_YEARS                                      0x0003
  97. ;Vector display ( SPED )
  98. #define SPED_ID_H                                                       0x42ba
  99. #define SPED_ID_L                                                       0xbf3c
  100. #define SPED_GET_STATE                                          0x0000
  101. #define SPED_MAP_MEMORY                                         0x0001
  102. #define SPED_ROTATE_DEVICE                                      0x0003
  103. #define SPED_STATE_NO_DATA                                      0x0000
  104. #define SPED_STATE_RUNNING                                      0x0001
  105. #define SPED_STATE_TURNING                                      0x0002
  106. #define SPED_ERROR_NONE                                         0x0000
  107. #define SPED_ERROR_BROKEN                                       0xFFFF
  108. ;Manufactorers
  109. #define MACKAPAR_H                                                      0x1eb3
  110. #define MACKAPAR_L                                                      0x7e91
  111. #define NYA_ELEKTRISKA_H                                        0x1c6c
  112. #define NYA_ELECTRISKA_L                                        0x8b36
  113. ;Io constants
  114. #define DEFUALT_STDOUT_SCREEN_ADDRESS           0xB000
  115.  
  116. ; === Marcos ===
  117. #macro func(){ ;Setup for a function with local stack variables
  118.         set push,sp
  119. }
  120.  
  121. #macro ret( n ){ ;Return from a function with N amount of local stack variables
  122.         set sp,pick n
  123.         set pc,pop
  124. }
  125.  
  126. #macro leave(){ ;Leave from a function / routine without stack variables
  127.         set pc,pop
  128. }
  129.  
  130. #macro store( n ){ ;Store an address or register
  131.         set push,n
  132. }
  133.  
  134. #macro restore( n ){
  135.         set n,pop
  136. }
  137.  
  138. #macro store_regs(){
  139.         store A
  140.         store B
  141.         store C
  142.         store X
  143.         store Y
  144.         store Z
  145.         store I
  146.         store J
  147. }
  148.  
  149. #macro restore_regs(){
  150.         restore A
  151.         restore B
  152.         restore C
  153.         restore X
  154.         restore Y
  155.         restore Z
  156.         restore I
  157.         restore J
  158. }
  159.  
  160. #macro declare( n ){ ;Declare a dynamic local variable( Keeps track of the number of delcared variables )
  161.         add z,n
  162.         set j,n
  163.         set i,0
  164.         set a,sp
  165.         ._ll
  166.                 store 0
  167.                 add i,1
  168.                 ifn i,j
  169.                         set pc,_ll
  170. }
  171.  
  172. #macro define( n , m ){ ;Declares as declare does, but also sets the value(s)
  173.         add z,n
  174.         set j,n
  175.         set i,0
  176.         set a,sp
  177.         ._ll
  178.                 store i+m
  179.                 add i,1
  180.                 ifn i,j
  181.                         set pc,_ll
  182. }
  183.  
  184. #macro finish(){ ;Clear the stack from the dynamicly defined variables
  185.         ret z
  186. }
  187.  
  188. #macro goto( n ){
  189.         set pc,n
  190. }
  191. ; === Code ===
  192.  
  193. ;MEM MAP
  194. ; 0x0000 -> 0x9FFF code
  195. ; 0xA000 -> 0xAFFF web io
  196. ; 0xB000 -> 0xB179 screen ram
  197. ; 0xB180 -> 0x???? mem table
  198. ; 0x???? <- 0xFFFF stack
  199. ;
  200.  
  201.  
  202. :io_datatable
  203.         :io_stdout      dat             0
  204.         :io_stdin       dat             0
  205.         :io_hcount      dat             0
  206.         :io_stdout_pos          dat     0
  207.         :io_stdcolour           dat             COLOUR_LIGHT_GREY
  208.  
  209. :io_init
  210.         ;; io_init()
  211.         ;; Initializes monitor and keyboard if present
  212.         func
  213.         set [sys_io],io_datatable
  214.         jsr io_check
  215.         set a,MONITOR_ID_H
  216.         set b,MONITOR_ID_L
  217.         jsr io_query
  218.         set [io_stdout],a
  219.         set a,KEYBOARD_ID_H
  220.         set b,KEYBOARD_ID_L
  221.         jsr io_query
  222.         set [io_stdin],a
  223.         jsr io_startScreen
  224.         ret 0
  225.  
  226. :io_check
  227.         ;; io_check()
  228.         ;; Returns the number of hardware devices connected, and stores it in 'io_hcount' too.
  229.         hwn a
  230.         set [io_hcount],a
  231.         leave
  232.  
  233. :io_query
  234.         func
  235.         store a
  236.         store b
  237.         set j,[io_hcount]
  238.         set i,0
  239.         ._queryLoop
  240.                 hwq i
  241.                 ife a,peek
  242.                         ife b,pick 1
  243.                                 goto _querySuccess
  244.                 add i,1
  245.                 ifn i,j
  246.                         goto _queryLoop
  247.         ._querySuccess
  248.         set a,i
  249.         ret 2
  250.  
  251. :io_startScreen
  252.         set a,0
  253.         set b,DEFUALT_STDOUT_SCREEN_ADDRESS
  254.         hwi [io_stdout]
  255.         leave
  256.  
  257. :io_print
  258.         ife b,0
  259.                 set b,[io_stdcolour]
  260.         ._printLoop
  261.                 set i,[a]
  262.                 ife i,0
  263.                         leave
  264.                 ife i,0x0A
  265.                         goto _printNewline
  266.                 bor i,b
  267.                 set j,[io_stdout_pos]
  268.                 set [j+DEFUALT_STDOUT_SCREEN_ADDRESS],i
  269.                 add a,1
  270.                 add [io_stdout_pos],1
  271.                 goto _printLoop
  272.         ._printNewline
  273.         set c,[io_stdout_pos]
  274.         mod c,32
  275.         ife c,0
  276.                 goto _en
  277.         set i,32
  278.         sub i,c
  279.         add [io_stdout_pos],i
  280.         ._en
  281.         add a,1
  282.         goto _printLoop
  283.  
  284. :io_printstd
  285.         set b,[io_stdcolour]
  286.         jsr io_print
  287.         leave
  288.  
  289. :io_putchar
  290.         ife b,0
  291.                 set b,[io_stdcolour]
  292.         set i,y
  293.         mul i,MONITOR_WIDTH
  294.         add i,x
  295.         bor a,b
  296.         set [i+DEFUALT_STDOUT_SCREEN_ADDRESS],a
  297.         leave
  298.  
  299. :io_getchar
  300.         store c
  301.         set a,KEYBOARD_STORE_KEY
  302.         hwi [io_stdin]
  303.         set a,c
  304.         restore c
  305.         leave
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top