linux-assembly.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* I'm booted.
@ 2003-06-18  8:07 Rick A. Hohensee
  0 siblings, 0 replies; 2+ messages in thread
From: Rick A. Hohensee @ 2003-06-18  8:07 UTC (permalink / raw)
  To: nbuck, debs, rhyde, BethStone21, linux-assembly

I just got proof of a 32-bit world from some boot code I wrote in
osimplay. osimplay is the latest incarnation of shasm. I got slashdotted a
while back for shasm, which is a 386 assembler written entirely in GNU
Bash shell scripts. In the present code, I boot from floppy and send four
vertically aligned junk charachters to the screen, the fourth of which is
visibly four bytes in one store to memory. Howdy.

osimplay is shasm with some cleanups and some semi-high-levelism. It has
execution arrays, which are a nightmare in C, and some other goodies, like
min and max, cheesy struct-like things, a couple flavors of procedure and
so on. No DO/WHILE type flow-control abstractions though. That way lies
Java. And it has Forth-like naming. It's as Forthy as I can get without
the inner interpreter, or stack machine silicon. I think it obsoletes C,
basically. Particularly for kernels, although I muchly prefer it to C for
regular apps now also. I have about a third of a text editor written in
osimplay too. If you write an OS in osimplay, there's no asm("") issues.
It's all assembly. And there's no blessed toolchain. You need a unix-like
shell. This is for real bootstraps, as opposed to C compilers that you
need a C compiler to build. osimplay is not GNEIOU, GNU Never Existed
Independant Of UNIX.  osimplay is a trivial port to pdksh, BTW.

Here's what is currently the Ha3sm 0.000001 or whatever top-level source
file. HL and opnote are listing twiddlers.
..........................................................................

. boot/fromfloppy

        nosurprises
                                # I'm a live 8086 with VGA
        = 0xb800 to A
        = A to DS               # 8086 data segment is the screen.
        = 0x3344 to A
        = A to @ 544            # blip 1
        zero A
        = A to DS               # setGDT offsets from DS. That cost me a
day.

        setGDT initial_gdtr
        = 0xb800 to A
        = A to DS
        = 0x7772 to A
        = A to @ 864            # blip 2

        = 1 to A
        ab 0x0f 0x01 0xf0               # load machine status word from A

        jump PMODE16                    # icache cleaner
L  PMODE16

        = 0x7372 to A           # blip 3
        = A to @ 1184
                        HL
        ab 0xea
        ad BIG_CS
        ad 8
                        opnote          far jump addr./GDTindex ptr
L BIG_CS
cell=4                          # tell osimplay to compemble for 32-bit.
        = 0x37423392 to A
        = A to @ 1504           # blip 4, 32 bit, two cells with attribs.
halt
        = 0x10 to A
        = A to DS
L BIG_DS



. boot/GDTdata

........................................................................

Here's the listing analagous to "gas -a", which shows the includes also.
In e.g. 00007c00 270 50 02 the 270 is octal, 50 and 02 are hex. There's
some decimal in the source (right) column.

00000000  00...                         ALLOT 0x7C00
00007c00  270 50 02                     = 592 to A
00007c03  271 01 00                     = 1 to C
00007c06  31 322                        XOR D with D
00007c08  273 00 7c                     = 0x7c00 to B
00007c0b  cd 13                         submit 0x13
00007c0d  fa                    nosurprises
00007c0e  270 00 b8                     = 0xb800 to A
00007c11  8e 330                        = A to DS
00007c13  270 44 33                     = 0x3344 to A
00007c16  89 006 20 02                  = A to @ 544
00007c1a  31 300                        XOR A with A
00007c1c  8e 330                        = A to DS
00007c1e  0f 01 16 57 7c                        setGDT initial_gdtr
00007c23  270 00 b8                     = 0xb800 to A
00007c26  8e 330                        = A to DS
00007c28  270 72 77                     = 0x7772 to A
00007c2b  89 006 60 03                  = A to @ 864
00007c2f  270 01 00                     = 1 to A        0f 01 f0
00007c35  e9 00 00                      jump PMODE16
00007c38                (O) PMODE16
00007c38  270 72 73                     = 0x7372 to A
00007c3b  89 006 a0 04                  = A to @ 1184
00007c3f  ea 44 7c 08 00                        far jump addr./GDTindex ptr
00007c44                (O) BIG_CS
00007c44  270 92 33 42 37                       = 0x37423392 to A
00007c49  89 005 e0 05 00 00                    = A to @ 1504
00007c4f  f4                    halt
00007c50  270 10 00 00 00                       = 0x10 to A
00007c55  8e 330                        = A to DS
00007c57                (O) BIG_DS
00007c57                (O) initial_gdtr
00007c57  00 02 5d 7c 00 00
00007c5d                (O) GDT_templates
00007c5d  00 00 00 00 00 00 00 00
00007c65  ff ff 00 00 00 9a cf 00                       index 1
00007c6d  ff ff 00 00 00 92 cf 00


An osimplay not exactly like this one is on my webpage in cLIeNUX/interim.
With some docs. I'm on welfare Internet access at the moment, and I'm not
gonna cut-paste the current osimplay between vts to email it. :o) It's a
shell script. Foot yourself shoot in.

        URL: ftp://linux01.gwdg.de/pub/cLIeNUX/interim/osimplay.tgz


Rick Hohensee
Precision Mojo Engineer


^ permalink raw reply	[flat|nested] 2+ messages in thread

* I'm booted.
@ 2003-06-19  7:48 Rick A. Hohensee
  0 siblings, 0 replies; 2+ messages in thread
From: Rick A. Hohensee @ 2003-06-19  7:48 UTC (permalink / raw)
  To: rhyde, BethStone21, konst, linux-assembly, j2thomas, jvn, m_l_g3,
	erather, m-coughlin, cjakeman, koopman, jdhall, Fox

I just got proof of a 32-bit world from some boot code I wrote in
osimplay. osimplay is the latest incarnation of shasm. I got slashdotted a
while back for shasm, which is a 386 assembler written entirely in GNU
Bash shell scripts. In the present code, I boot from floppy and send four
vertically aligned junk charachters to the screen, the fourth of which is
visibly four bytes in one store to memory. Howdy.

osimplay is shasm with some cleanups and some semi-high-levelism. It has
execution arrays, which are a nightmare in C, and some other goodies, like
min and max, cheesy struct-like things, a couple flavors of procedure and
so on. No DO/WHILE type flow-control abstractions though. That way lies
Java. And it has Forth-like naming. It's as Forthy as I can get without
the inner interpreter, or stack machine silicon. I think it obsoletes C,
basically. Particularly for kernels, although I muchly prefer it to C for
regular apps now also. I have about a third of a text editor written in
osimplay too. If you write an OS in osimplay, there's no asm("") issues.
It's all assembly. And there's no blessed toolchain. You need a unix-like
shell. This is for real bootstraps, as opposed to C compilers that you
need a C compiler to build. osimplay is not GNEIOU, GNU Never Existed
Independant Of UNIX.  osimplay is a trivial port to pdksh, BTW.

Here's what is currently the Ha3sm 0.000001 or whatever top-level source
file. HL and opnote are listing twiddlers.
..........................................................................

. boot/fromfloppy

        nosurprises
                                # I'm a live 8086 with VGA
        = 0xb800 to A
        = A to DS               # 8086 data segment is the screen.
        = 0x3344 to A
        = A to @ 544            # blip 1
        zero A
        = A to DS               # setGDT offsets from DS. That cost me a
day.

        setGDT initial_gdtr
        = 0xb800 to A
        = A to DS
        = 0x7772 to A
        = A to @ 864            # blip 2

        = 1 to A
        ab 0x0f 0x01 0xf0               # load machine status word from A

        jump PMODE16                    # icache cleaner
L  PMODE16

        = 0x7372 to A           # blip 3
        = A to @ 1184
                        HL
        ab 0xea
        ad BIG_CS
        ad 8
                        opnote          far jump addr./GDTindex ptr
L BIG_CS
cell=4                          # tell osimplay to compemble for 32-bit.
        = 0x37423392 to A
        = A to @ 1504           # blip 4, 32 bit, two cells with attribs.
halt
        = 0x10 to A
        = A to DS
L BIG_DS



. boot/GDTdata

........................................................................

Here's the listing analagous to "gas -a", which shows the includes also.
In e.g. 00007c00 270 50 02 the 270 is octal, 50 and 02 are hex. There's
some decimal in the source (right) column.

00000000  00...                         ALLOT 0x7C00
00007c00  270 50 02                     = 592 to A
00007c03  271 01 00                     = 1 to C
00007c06  31 322                        XOR D with D
00007c08  273 00 7c                     = 0x7c00 to B
00007c0b  cd 13                         submit 0x13
00007c0d  fa                    nosurprises
00007c0e  270 00 b8                     = 0xb800 to A
00007c11  8e 330                        = A to DS
00007c13  270 44 33                     = 0x3344 to A
00007c16  89 006 20 02                  = A to @ 544
00007c1a  31 300                        XOR A with A
00007c1c  8e 330                        = A to DS
00007c1e  0f 01 16 57 7c                        setGDT initial_gdtr
00007c23  270 00 b8                     = 0xb800 to A
00007c26  8e 330                        = A to DS
00007c28  270 72 77                     = 0x7772 to A
00007c2b  89 006 60 03                  = A to @ 864
00007c2f  270 01 00                     = 1 to A        0f 01 f0
00007c35  e9 00 00                      jump PMODE16
00007c38                (O) PMODE16
00007c38  270 72 73                     = 0x7372 to A
00007c3b  89 006 a0 04                  = A to @ 1184
00007c3f  ea 44 7c 08 00                        far jump addr./GDTindex ptr
00007c44                (O) BIG_CS
00007c44  270 92 33 42 37                       = 0x37423392 to A
00007c49  89 005 e0 05 00 00                    = A to @ 1504
00007c4f  f4                    halt
00007c50  270 10 00 00 00                       = 0x10 to A
00007c55  8e 330                        = A to DS
00007c57                (O) BIG_DS
00007c57                (O) initial_gdtr
00007c57  00 02 5d 7c 00 00
00007c5d                (O) GDT_templates
00007c5d  00 00 00 00 00 00 00 00
00007c65  ff ff 00 00 00 9a cf 00                       index 1
00007c6d  ff ff 00 00 00 92 cf 00


An osimplay not exactly like this one is on my webpage in cLIeNUX/interim.
With some docs. I'm on welfare Internet access at the moment, and I'm not
gonna cut-paste the current osimplay between vts to email it. :o) It's a
shell script. Foot yourself shoot in.

        URL: ftp://linux01.gwdg.de/pub/cLIeNUX/interim/osimplay.tgz


Rick Hohensee
Precision Mojo Engineer


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-06-19  7:48 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-06-19  7:48 I'm booted Rick A. Hohensee
  -- strict thread matches above, loose matches on Subject: below --
2003-06-18  8:07 Rick A. Hohensee

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).