Advertisement
Guest User

io.10c

a guest
Dec 26th, 2013
322
0
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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement