Heh. It works. I wrote a pmode pico-kernel in shell script assembly.

Rick A. Hohensee (rickh@capaccess.org)
Wed, 02 Jul 2003 05:50:07 -0400


I've got various burblers going on the screen in various timescales.
There's an INT 100 that gets called in the main endless loop, and that
churns the fastest. There's a couple of blinking characters courtesy of
VGA. The endless loop also polls the keyboard and changes a couple
characters based on the current or latest scancode. There's another
burbler for Ye Olde Dos Jiffy, and that of course is slower than the
endless-loop burbler, so I use a big increment to make it look nicer.

The really fun one though is all IRQs besides 0 use the same burbler cell
on the screen, so that's acting as a keyboard character counter. It comes
up ! on boot from the left-over floppy IRQ I guess, and then when you hit
keys it increments up through the ROM font.

Rick Hohensee
Precision Mojo Engineer

00000000 00... ALLOT 0x7C00
00007c00 270 28 02 = 552 to A
00007c03 271 01 00 = 1 to C
00007c06 31 322 XOR D with D
00007c08 8e 302 = D to ES
00007c0a 273 00 7c = 0x7c00 to B
00007c0d cd 13 submit 0x13
00007c0f fa nosurprises
00007c10 270 00 b8 = 0xb800 to A
00007c13 8e 330 = A to DS
00007c15 270 48 68 = 0x6848 to A
00007c18 89 006 20 02 = A to @ 544
00007c1c 31 300 XOR A with A
00007c1e 8e 330 = A to DS
00007c20 0f 01 16 61 7d setGDT initial_gdtr
00007c25 270 00 b8 = 0xb800 to A
00007c28 8e 330 = A to DS
00007c2a 270 61 61 = 0x6161 to A
00007c2d 89 006 c0 02 = A to @ 704
00007c31 270 01 00 = 1 to A 0f 01 f0
00007c37 e9 00 00 jump PMODE16
00007c3a (O) PMODE16
00007c3a 270 33 f2 = 0xf233 to A
00007c3d 89 006 60 03 = A to @ 864
00007c41 ea 46 7c 10 00 far jump addr./GDTindex ptr
00007c46 (O) BIG_CS
00007c46 270 4e 33 73 27 = 0x2773334e to A
00007c4b 89 005 00 04 00 00 = A to @ 1024
00007c51 270 18 00 00 00 = 0x18 to A
00007c56 8e 330 = A to DS
00007c58 (O) BIG_DS
00007c58 270 21 3a 6d 27 = 0x276d3a21 to A
00007c5d 89 005 a0 84 0b 00 = A to @ 754848
00007c63 31 300 XOR A with A
00007c65 8e 300 = A to ES
00007c67 8e 340 = A to FS
00007c69 8e 350 = A to GS
00007c6b (O) nullifiedextrasegments
00007c6b 270 75 84 74 00 = 0x748475 to A
00007c70 89 005 60 88 0b 00 = A to @ 755808
00007c76 270 18 00 00 00 = 0x18 to A
00007c7b 8e 320 = A to SS
00007c7d 274 00 40 10 00 = 0x104000 to SP
00007c82 270 df 00 00 00 = 0xdf to A
00007c87 272 64 00 00 00 = 0x64 to D
00007c8c ee send byte
00007c8d 270 03 00 00 00 = 0x3 to A
00007c92 e8 5a 02 00 00 call writekeyboardwires
00007c97 (O) defaultallvectors
00007c97 31 377 XOR DI with DI
00007c99 (O) perIDTvector
00007c99 60 pushcore
00007c9a 270 37 7e 00 00 = twitch to A
00007c9f e8 5b 01 00 00 call install
00007ca4 61 pullcore
00007ca5 107 1+ DI
00007ca6 81 377 7f 00 00 00 -test 127 with DI
00007cac 0f 85 e7 ff ff ff when not zero perIDTvector
00007cb2 (O) defaultallIRQs
00007cb2 277 20 00 00 00 = 0x20 to DI
00007cb7 (O) perIRQvector
00007cb7 60 pushcore
00007cb8 270 47 7e 00 00 = IRQtwitch to A
00007cbd e8 3d 01 00 00 call install
00007cc2 61 pullcore
00007cc3 107 1+ DI
00007cc4 81 377 30 00 00 00 -test 0x30 with DI
00007cca 0f 85 e7 ff ff ff when not zero perIRQvector
00007cd0 277 20 00 00 00 = 0x20 to DI
00007cd5 60 pushcore
00007cd6 270 6a 7e 00 00 = IRQ0twitch to A
00007cdb e8 1f 01 00 00 call install
00007ce0 61 pullcore
00007ce1 0f 01 1d 92 7e 00 00 setIDT 32402
00007ce8 (O) PICprogram
00007ce8 270 11 00 00 00 = 17 to A
00007ced 272 20 00 00 00 = 0x20 to D
00007cf2 ee send byte
00007cf3 272 a0 00 00 00 = 0xa0 to D
00007cf8 ee send byte
00007cf9 270 20 00 00 00 = 0x20 to A
00007cfe 272 21 00 00 00 = 0x21 to D
00007d03 ee send byte
00007d04 270 28 00 00 00 = 0x28 to A
00007d09 272 a1 00 00 00 = 0xa1 to D
00007d0e ee send byte
00007d0f 270 04 00 00 00 = 4 to A
00007d14 272 21 00 00 00 = 0x21 to D
00007d19 ee send byte
00007d1a 270 02 00 00 00 = 2 to A
00007d1f 272 a1 00 00 00 = 0xa1 to D
00007d24 ee send byte
00007d25 270 01 00 00 00 = 1 to A
00007d2a 272 21 00 00 00 = 0x21 to D
00007d2f ee send byte
00007d30 272 a1 00 00 00 = 0xa1 to D
00007d35 ee send byte
00007d36 fb surprises
00007d37 (O) theloop
00007d37 272 60 00 00 00 = 0x60 to D
00007d3c ec recieve byte
00007d3d 0d 00 43 22 33 OR 0x33224300 to A
00007d42 89 005 00 81 0b 00 = A to @ 753920
00007d48 272 64 00 00 00 = 0x64 to D
00007d4d ec recieve byte
00007d4e 0d 00 43 87 23 OR 0x23874300 to A
00007d53 89 005 04 81 0b 00 = A to @ 753924
00007d59 cd 33 submit 0x33
00007d5b e9 d7 ff ff ff jump theloop
00007d60 f4 halt
00007d61 (O) initial_gdtr
00007d61 00 04 67 7d 00 00
00007d67 (O) GDT
00007d67 00 00 00 00 00 00 00 00 0 NULL, required
00007d6f
00007d6f (O) ringN
00007d6f ff ff 00 00 00 89 cf 00 1 stackstack
00007d77
00007d77 (O) ring0
00007d77 ff ff 00 00 00 9a cf 00 2 CS
00007d7f ff ff 00 00 00 92 cf 00 3 ring0 data
00007d87 00 00 00 00 00 00 00 00 4 spacer
00007d8f 00 00 00 00 00 00 00 00 5 spacer
00007d97 00 00 00 00 00 00 00 00 6 spacer
00007d9f 00 00 00 00 00 00 00 00 7 spacer
00007da7 00 00 00 00 00 00 00 00 8 spacer
00007daf
00007daf (O) legmegschweg
00007daf ff ff 00 00 0e 9a c0 00 9 RBIOS CS
00007db7 ff ff 00 00 00 92 c0 00 10 BIOS DS 0
00007dbf ff ff 00 00 0d 9a c0 00 11 RVBIOS code
00007dc7 ff ff 00 80 0b 92 c0 00 12 8086 VGA data
00007dcf ff ff 00 00 08 92 80 00 13 legmeg SS
00007dd7 00 00 00 00 00 00 00 00 14 spacer
00007ddf 00 00 00 00 00 00 00 00 15 spacer
00007de7
00007de7 (O) ring0A
00007de7 ff ff 00 00 00 ba cf 00 16 RING 0A SS
00007def ff ff 00 00 00 b2 cf 00 17 ring 0A data
00007df7 ff ff 00 00 00 ba cf 00 18 RING 0A SS
00007dff ring3 probably will want BGDT
00007dff
00007dff (O) install
00007dff 273 10 00 00 00 = 16 to B
00007e04 271 0e 00 00 00 = 14 to C
00007e09 c1 347 03 upshift 3 to DI
00007e0c 81 307 00 10 00 00 + 0x1000 to DI
00007e12 (O) makegate
00007e12 89 302 = A to D
00007e14 81 342 ff ff 00 00 AND 0x0000ffff to D
00007e1a 81 312 00 00 10 00 OR 0x100000 to D
00007e20 89 027 = D to @ DI
00007e22 c1 341 08 upshift 8 to C
00007e25 81 311 00 80 00 00 OR 0x8000 to C
00007e2b 81 340 00 00 ff ff AND 0xffff0000 to A
00007e31 09 301 OR A to C
00007e33 89 117 04 = C to @ 4 DI
00007e36 c3 return
00007e37 (O) twitch
00007e37 120 push A
00007e38 8b 005 32 8a 0b 00 = @ 756274 to A
00007e3e 100 1+ A
00007e3f 89 005 32 8a 0b 00 = A to @ 756274
00007e45 130 pull A
00007e46 cf dismiss
00007e47 (O) IRQtwitch
00007e47 120 push A
00007e48 8b 005 0e 81 0b 00 = @ 753934 to A
00007e4e 100 1+ A
00007e4f 89 005 0e 81 0b 00 = A to @ 753934
00007e55 122 push D
00007e56 270 20 00 00 00 = 32 to A
00007e5b 272 a0 00 00 00 = 0xa0 to D
00007e60 ee send byte
00007e61 272 20 00 00 00 = 0x20 to D
00007e66 ee send byte
00007e67 132 pull D
00007e68 130 pull A
00007e69 cf dismiss
00007e6a (O) IRQ0twitch
00007e6a 120 push A
00007e6b 8b 005 6e 80 0b 00 = @ 753774 to A
00007e71 81 300 07 b2 01 00 + 111111 to A
00007e77 89 005 6e 80 0b 00 = A to @ 753774
00007e7d 122 push D
00007e7e 270 20 00 00 00 = 32 to A
00007e83 272 a0 00 00 00 = 0xa0 to D
00007e88 ee send byte
00007e89 272 20 00 00 00 = 0x20 to D
00007e8e ee send byte
00007e8f 132 pull D
00007e90 130 pull A
00007e91 cf dismiss
00007e92 (O) initial_IDTreg
00007e92 00 02 00 10 00 00
00007e98 (O) appendages

No concatenated code required. :o)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/