Guest User

0x10c

a guest
Jul 9th, 2012
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Acquire device numbers
  2. hwn I
  3. :map_devices
  4.     hwq i
  5.     ife b, 0x7349
  6.         ife a, 0xf615
  7.             set [monitor], i
  8.     ife b, 0x30cf
  9.         ife a, 0x7406
  10.             set [keyboard], i
  11.     sub i, 1
  12.     ifn i, 0
  13.     set pc, map_devices
  14.  
  15. ; Map monitor video ram
  16. set a, 0x0
  17. set b, [moni_ram_start]
  18. hwi [monitor]
  19.  
  20. ; Draw intro
  21. set x, msg_start
  22. set y, [moni_ram_start]
  23. set z, 0x1e0
  24. jsr drawstr
  25.  
  26. ; Keyboard loop
  27. set a, 0x1
  28. set i, [cmd_buf] ; Command buffer index
  29. set j, [moni_ram_start] ; Video RAM index
  30. add j, 0x20 ; Offset for welcome message
  31. set [j], 0xf0fc ; Draw cursor at start
  32.  
  33. :loop
  34.     hwi [keyboard]
  35.     ife c, 0x0
  36.         set pc, loop
  37.  
  38.     ife c, 0x10
  39.         set pc, backspace
  40.     ife c, 0x11
  41.         set pc, linebreak
  42.        
  43.     set [i], c ; Write to command buffer
  44.    
  45.     set z, 0xf000 ; Formatting helper variable
  46.     add z, c ; Format
  47.     set [j], z ; Write to video RAM
  48.    
  49.     ; Update indexes
  50.     add i, 0x1
  51.     add j, 0x1
  52.    
  53.     set [j], 0xf0fc ; Draw cursor
  54.     set pc, loop
  55.    
  56. :backspace
  57.     ife j, [bs_limit]
  58.         set pc, loop
  59.     set [j], 0x0 ; Delete cursor at current location
  60.     ; Decrement indexes
  61.     sub i, 0x1
  62.     sub j, 0x1
  63.     set [j], 0xf0fc ; Draw cursor
  64.     set [i], 0x0 ; Delete buffer token
  65.     set pc, loop
  66.    
  67. :linebreak
  68.     set [j], 0x0
  69.     set x, j
  70.     sub x, [moni_ram_start]
  71.     :linebreakloop
  72.         add j, 0x1
  73.         add x, 0x1
  74.         set [j], 0xf0fc
  75.         mod x, 0x20
  76.         ifn x, 0x0
  77.             set pc, linebreakloop
  78.     set a, [cmd_buf]
  79.     set b, cmdstr_version
  80.     jsr cmpstr
  81.     ife z, 0x1
  82.         jsr tell_version
  83.     set [j], 0xf0fc
  84.     set pc, loop
  85.    
  86. :tell_version
  87.     set x, msg_version
  88.     set y, j
  89.     set z, 0x1e0
  90.     jsr drawstr
  91.     set pc, pop
  92. ; Functions
  93. ; Write string from X to Y using formatting Z (bbbbffff_)
  94. :drawstr
  95.     set push, a
  96.     shl z, 0x7
  97.     :drawstr_loop
  98.     set a, [x]
  99.     add a, z
  100.     set [y], a
  101.     add x, 0x1
  102.     add y, 0x1
  103.     ifn [x], 0x0
  104.     set pc, drawstr_loop
  105.     set a, pop
  106.     set pc, pop
  107.    
  108. ; If strings starting at X and Y are equal, set Z to 0x1, otherwise 0x0
  109. :cmpstr
  110.     set z, 0x1
  111.     :cmpstr_loop
  112.     ifn [x], [y]
  113.         set pc, cmpstr_break
  114.     add x, 0x1
  115.     add y, 0x1
  116.     ifn x, 0x0
  117.         ifn y, 0x0
  118.             set pc, cmpstr_loop
  119.     set pc, pop
  120.     :cmpstr_break
  121.         set z, 0x0
  122.         set pc, pop
  123.  
  124. ; Data
  125. :monitor dat 0x0
  126. :moni_ram_start dat 0x1f40
  127.  
  128. :keyboard dat 0x0
  129.  
  130. :cmd_buf dat 0x1b58
  131.  
  132. :bs_limit dat 0x1F60
  133.  
  134. :msg_start dat "Welcome to Shizuku.", 0x0
  135.  
  136. :cmdstr_version dat "version", 0x0
  137. :msg_version dat "Version 0.1 Alpha", 0x0
Advertisement
Add Comment
Please, Sign In to add comment