From f78db220bcefb50e55cbc5138fc4f441ab763360 Mon Sep 17 00:00:00 2001 From: joevt Date: Mon, 22 Aug 2022 00:39:08 -0700 Subject: [PATCH] Add @startvec notes because it's not the same as StartVec --- zdocs/openfirmware.md | 109 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/zdocs/openfirmware.md b/zdocs/openfirmware.md index 41ceef8..1e664e2 100644 --- a/zdocs/openfirmware.md +++ b/zdocs/openfirmware.md @@ -112,6 +112,115 @@ FFF20084 dc.l 0x7720 ; offset to the last Forth word descriptor of the kernel ``` +This StartVec structure in ROM is not to be confused with the `@startvec` structure in RAM. +Open Firmware 2.4 lists the fields of `@startvec`: + +``` +0x488 0000 FF808000 >of.next 00001000 +0x489 0004 FF808004 >of.dev-ven 00000000 +0x48A 0008 FF808008 >of.class 00000000 +0x48B 000C FF80800C >of.offset 00000000 +0x48C 0010 FF808010 >of.fcode 00000000 +0x48D 0008 FF808008 >imagesize 00000000 +0x48E 000C FF80800C >'cold2 00000000 +0x48F 0010 FF808010 >'map-page 00000000 +0x490 0014 FF808014 >'map-io 00000000 +0x491 0018 FF808018 >endiango FF808940 +0x492 001C FF80801C >little? 00000000 +0x493 0020 FF808020 >swizzle? 00000000 +0x494 0024 FF808024 >real? 00000000 +0x495 0028 FF808028 >rom-base FFF2003C +0x496 002C FF80802C >real_base 00400000 +0x497 0030 FF808030 >virt_base FF800000 +0x498 0034 FF808034 >real-vt-hd 004DFC00 +0x499 0038 FF808038 >restart FFF201DC +0x49A 003C FF80803C >fcimage FFF27954 +0x49B 0040 FF808040 >fcfiles FFF48C84 +0x49C 0044 FF808044 >lasttoken 00000EB5 +0x49D 0048 FF808048 >word-list FF85D4E8 +0x49E 004C FF80804C >'ferror FF80D0B0 ferror +0x49F 0050 FF808050 >'(poplocals) FF80A350 (poplocals) +0x4A0 0054 FF808054 >'cold-load FF80F738 cold-load +0x4A1 0058 FF808058 >'cold-init FF818350 _cold-init +0x4A2 005C FF80805C >'quit FF8179A8 quit +0x4A3 0060 FF808060 >'abort FF811FA0 abort +0x4A4 0064 FF808064 >'syscatch FF819638 _syscatch +0x4A5 0068 FF808068 >'excp FF819338 _exception +0x4A6 006C FF80806C >'bp-done 00000000 +0x4A7 0070 FF808070 >'step-done 00000000 +0x4A8 0074 FF808074 >'mini-nub 00000000 +0x4A9 0078 FF808078 >hwinitlr FFF04D50 +0x4AA 007C FF80807C >hwinitiv 00000000 +0x4AB 0080 FF808080 >hwinit3 00009000 +0x4AC 0084 FF808084 >hwinit4 00009120 +0x4AD 0088 FF808088 >hwinit8 FFF03058 +0x4AE 008C FF80808C >hwinit9 F3060000 +0x4AF 0090 FF808090 >sccac F3013020 +0x4B0 0094 FF808094 >sccad F3013030 +0x4B1 0098 FF808098 >ramsize 30000000 +0x4B2 009C FF80809C >cpuclock 0DF092B0 +0x4B3 00A0 FF8080A0 >busclock 03FB97A0 +0x4B4 00A4 FF8080A4 >tbclock 00FEE5E8 +0x4B5 00A8 FF8080A8 >here FF85D524 +0x4B6 00AC FF8080AC >free-top FF8E0000 +0x4B7 00B0 FF8080B0 >free-bot FF8D0000 +0x4B8 00B4 FF8080B4 >#dsi-ints 00000000 +0x4B9 00B8 FF8080B8 >#isi-ints 00000000 +0x4BA 00BC FF8080BC >dl-buf FF8F0800 +0x4BB 00C0 FF8080C0 >ttp800 FF8D6000 +0x4BC 00C4 FF8080C4 >'cientry FF809E18 cientry +0x4BD 00C8 FF8080C8 >'cicall FF829498 cicall +0x4BE 00CC FF8080CC >'my-self FF80D8D0 +0x4BF 00D0 FF8080D0 >' 00409D10 +0x4C0 00D4 FF8080D4 >ofregsv FF8DFA00 ^-720600 +0x4C1 00D8 FF8080D8 >ciregsv FF8DF800 +0x4C2 00DC FF8080DC >ofregsr 004DFA00 +0x4C3 00E0 FF8080E0 >ciregsr 004DF800 +0x4C4 00E4 FF8080E4 >intvectv FF8DF600 +0x4C5 00E8 FF8080E8 >intvectr 004DF600 +0x4C6 00EC FF8080EC >regsvalid? FF808000 +0x4C7 00F0 FF8080F0 >ciwords FF82A3D0 +0x4C8 00F4 FF8080F4 >htab 004E0000 +0x4C9 00F8 FF8080F8 >keepbat2? 00000000 +0x4CA 00FC FF8080FC >keepbat3? 00000000 +0x4CB 0100 FF808100 >rp FF800800 +0x4CC 0104 FF808104 >dp FF800400 +0x4CD 0108 FF808108 >fp FF801000 +0x4CE 010C FF80810C >lp FF800C00 +0x4CF 0110 FF808110 >ep FF801800 +0x4D0 0114 FF808114 >ttp FF804000 +0x4D1 0118 FF808118 >tib FF801C00 +0x4D2 011C FF80811C >noname FF802000 +0x4D3 0120 FF808120 >dec-ints 00000000 +0x4D4 0124 FF808124 >dec-msec 00004141 +0x4D5 0128 FF808128 >r13-31 FFF03078 +``` + +The above is produced by this: + +``` +: dump_fields { addr fcodestart fcodeend ; token } + cr fcodeend 1+ fcodestart do + i ." 0x" 3 u.r space + i get-token drop -> token + 0 token execute 4 u.r space + addr token execute dup 8 u.r space + token name. + #out @ d# 42 < if d# 42 #out @ - spaces then + @ dup 8 u.r space + \ check if the field might point to a xt token and if so, output its name + dup @startvec u> if + dup dup xt>hdr 4+ dup c@ + 8 + -8 and = if name. else drop then + else drop then + cr + loop +; + +: dumpstartvec + @startvec 488 4d5 dump_fields ; + +dumpstartvec +``` ### Open Firmware internals