S0lll0s

S0lllOS 1.0

Apr 18th, 2013
589
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; --------------------------------------------
  2. ; Title:   kernel
  3. ; Author:  S0lll0s
  4. ; Date:    18.04.2013
  5. ; Version: 1.0
  6. ; --------------------------------------------
  7.  
  8. :_start     hwenumerate hwenum_targets, 3 ; hardware enumerator, results in keyboard_id, clock_id and lem1802_id
  9.  
  10.             SET A, 0
  11.             SET B, 60         ; one tick per second
  12.             HWI [clock_id]
  13.            
  14.             SET A, 2
  15.             SET B, 0x1337     ; interrupts with message 1337 means switch slice
  16.             HWI [clock_id]
  17.            
  18.             SET A, 0
  19.             SET B, 0x8000     ; map screen ram to 0x8000
  20.             HWI [lem1802_id]
  21.            
  22. :main1      IAS interrupt1
  23.             JSR kern_hijack_interrupt
  24. :loop1      SET X, [0x8001]
  25.             ADD X, 1
  26.             MOD X, 0xff
  27.             BOR X, 0x2a00
  28.             SET [0x8001], X
  29.             SET PC, loop1
  30.  
  31. :main2      IAS interrupt2
  32.             JSR kern_hijack_interrupt
  33. :loop2      SET Y, [0x8004]
  34.             ADD X, 1
  35.             MOD X, 0xff
  36.             BOR X, 0x2a00
  37.             SET [0x8004], X
  38.             SET PC, loop2
  39.  
  40. :interrupt1 SET 0, 0
  41.             SET 0, 0
  42.             RFI 0
  43.  
  44. :interrupt2 SET 0, 0
  45.             SET 0, 0
  46.             RFI 0
  47.  
  48. :kern_do_interrupt SET 0, 0        ; either uncomment this or the two BRK's above
  49.                    IFE A, 0x1337              ; switch slices
  50.                         SET PC, kern_switch
  51.                    JSR kern_hijack_interrupt
  52. :kern_done_int     SET 1, 1                   ; space for 'hijacked' instruction
  53.                    IAG Y
  54.                    ADD Y, 1
  55.                    SET PC, Y
  56.  
  57. :kern_finish_int   RFI 0
  58.  
  59. :kern_switch
  60.                        SET A, kern_slice0
  61.                        IFE [kern_slice], 1
  62.                            SET A, kern_slice1
  63.                        SET [A], POP ; A   save current state
  64.                        SET [A+1], B ; B
  65.                        SET [A+2], C ; C
  66.                        SET [A+3], X ; X
  67.                        SET [A+4], Y ; Y
  68.                        SET [A+5], Z ; Z
  69.                        SET [A+6], I ; I
  70.                        SET [A+7], J ; J
  71.                        SET [A+8], POP ; PC
  72.                        IAG X
  73.                        SET [A+9], X ; IA
  74.                        
  75.                        SET A, [kern_slice]
  76.                        XOR A, 1 ;           ; switch slices
  77.                        SET [kern_slice], A
  78.                        
  79.                        SET A, kern_slice0
  80.                        IFE [kern_slice], 1
  81.                            SET A, kern_slice1
  82.  
  83.                        SET PUSH, [A+8] ; PC ; restore old state
  84.                        SET PUSH, [A] ; A
  85.                        SET X, [A+9] ; Save IA in X temporarily
  86.                        IAS X
  87.                        SET B, [A+1] ; B
  88.                        SET C, [A+2] ; C
  89.                        SET X, [A+3] ; X
  90.                        SET Y, [A+4] ; Y
  91.                        SET Z, [A+5] ; Z
  92.                        SET I, [A+6] ; I
  93.                        SET J, [A+7] ; J
  94.  
  95.                        SET PC, kern_finish_int
  96.  
  97. :kern_hijack_interrupt IAG A
  98.                        SET [ kern_done_int ], [A] ; copy insr. to replace
  99.                        SET [ kern_done_int + 1 ], [A + 1] ; copy insr. to replace
  100.                        SET [ A ], 0x7f81                  ; SET PC,
  101.                        SET [ A + 1 ], kern_do_interrupt     ; kern_do_interrupt
  102.                        
  103.                        SET PC, POP
  104.  
  105. :kern_slice  DAT 0
  106. :kern_slice0 DAT 0 ; A
  107.              DAT 0 ; B
  108.              DAT 0 ; C
  109.              DAT 0 ; X
  110.              DAT 0 ; Y
  111.              DAT 0 ; Z
  112.              DAT 0 ; I
  113.              DAT 0 ; J
  114.              DAT 0 ; PC
  115.              DAT 0 ; IA
  116.  
  117. :kern_slice1 DAT 0 ; A
  118.              DAT 0 ; B
  119.              DAT 0 ; C
  120.              DAT 0 ; X
  121.              DAT 0 ; Y
  122.              DAT 0 ; Z
  123.              DAT 0 ; I
  124.              DAT 0 ; J
  125.              DAT main2 ; PC
  126.              DAT 0 ; IA
  127.  
  128. ; this is just a hardware enumerator, results in keyboard_id, clock_id and lem1802_id
  129.  
  130. :setup_keyboard
  131.             SET [keyboard_id], I   ; I holds the hardware ID, alternatively check hwenum_targets + 3
  132.             SET PC, POP            ; Identified handlers need to pop PC
  133.  
  134. :setup_clock
  135.             SET [clock_id], I
  136.             SET PC, POP
  137.  
  138. :setup_lem1802
  139.             SET [lem1802_id], I
  140.             set PC, POP
  141.  
  142. :setup_unknown
  143.             SET PC, POP
  144.  
  145.  
  146. :keyboard_id DAT 0xffff
  147. :clock_id    DAT 0xffff
  148. :lem1802_id  DAT 0xffff
  149.  
  150. :hwenum_targets
  151.     DAT setup_unknown                           ; Start with one word address to the unknown setup routine
  152.     DAT 0x30cf, 0x7406, 0xffff, setup_keyboard  ; one hardware setup is 4 words long
  153.     DAT 0x7349, 0xf615, 0xffff, setup_lem1802   ; Format: 4 higher ID bits, 4 lower ID bits, recognized
  154.     DAT 0x12d0, 0xb402, 0xffff, setup_clock     ; hardware ID (default 0xffff), last address to hwhandler
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×