ok see selftest : (ffd652b0) my-self >r (ffd4e4c0) my-termemu my-self - (ffd4e360) token@ + @ ?dup if (is) my-self then " disp-test" $call-self r> (is) my-self ; ok see disp-test : cg14-selftest 0 cg14-memory-test or ; ok see close : (ffd652f0) current-device >r my-voc (ffd4e390) my-termemu if (ffd4e4c0) my-termemu my-self - (ffd4e360) token@ + off (ffd4e4c0) frame-buffer-adr my-self - (ffd4e360) token@ + off my-termemu " remove" $call-self close-package then r> (ffd4e390) ; ok see remove : cg14-remove video-off video-unmap frame-buf-unmap " address" delete-attribute ; ok see restore termemu-defer reset-screen ( Parameter field: 42 ) ok see draw-logo termemu-defer draw-logo ( Parameter field: 48 ) ok see write : (ffd653a0) tuck ansi-type ; ok see open : (ffd65340) my-termemu ?dup if (ffd500b0) (is) my-self else " " ['] termemu open-package (ffd4e4b0) my-termemu " install" $call-self 0 old-code ! install-terminal-emulator my-self (ffd4e4c0) my-termemu over - (ffd4e360) token@ + ! frame-buffer-adr (ffd4e4c0) frame-buffer-adr my-self - (ffd4e360) token@ + ! then true ; ok see install : cg14-install frame-buf-map video-map monitor-sense@ set-monitor-parameters do-my-args video-off video-base-adr xdrint frame-buffer-adr xdrint xdr+ " address" attribute do-init ; ok see send-byte : send-byte 0 swap ff xor 8 0 do 1 bits send-bit swap get-bit i << or swap loop drop ff xor ; ok see get-bit : get-bit mod@ 2 >> 1 and ; ok see send-bit : send-bit dup 1 << 0 or mod! 1ms 1 << 1 or mod! 1ms ; ok see 1ms : 1ms 1 ms ; ok see bits : bits >r dup 20 r@ - tuck << swap >> swap r> >> swap ; ok see hdtv : hdtv -1 (ffd4e4b0) csc=hsc? ; ok see vsync : vsync -1 (ffd4e4b0) vsync? ; ok see cg14-probe : cg14-probe video-map 40 8 set-mdi-mode /frame set-vsimm-parameters ['] cg14-install is-install ['] cg14-remove is-remove ['] cg14-selftest is-selftest monitor-sense@ set-monitor-parameters monitor-attributes video-off init-video-hw video-unmap -1 (ffd4e4b0) frame-buffer-adr ; ok see cg14-remove : cg14-remove video-off video-unmap frame-buf-unmap " address" delete-attribute ; ok see cg14-install : cg14-install frame-buf-map video-map monitor-sense@ set-monitor-parameters do-my-args video-off video-base-adr xdrint frame-buffer-adr xdrint xdr+ " address" attribute do-init ; ok see do-mode-switch : do-mode-switch set-monitor-parameters do-init video-on ; ok see do-init : do-init monitor-attributes init-video-hw set-default-font hres vres hres char-width / vres char-height / fb8-install ['] cg14-draw-logo (ffd62b30) draw-logo ['] cg14-toggle-cursor (ffd62b30) toggle-cursor ['] cg14-blink-screen (ffd62b30) blink-screen ['] cg14-reset-screen (ffd62b30) reset-screen ; ok see do-my-args : do-my-args ['] (do-my-args) catch drop ; ok see (do-my-args) : (do-my-args) my-args ?dup 0= if drop exit then begin 2c left-parse-string ?dup while 2swap >r >r depth 2 - >r my-self ['] $call-method catch if drop 2drop else depth r@ - a = if set-mon-params then then r> drop r> r> repeat drop 2drop -1 throw ; ok see cg14-draw-logo : cg14-draw-logo 2 pick 92 + ul@ bfdfdfe7 <> if " oem-logo-color" get-my-attribute if sun-blue else xdrtoint nip nip then 1 color! fb8-draw-logo else drop 2drop logo-data setup-logo-colors swap >r dup l@ swap la1+ dup l@ swap 2 la+ r> char-height * window-top + hres * window-left + frame-buffer-adr + rot 0 do 2 pick 2 pick 2 pick rot move >r over + r> hres + loop drop 2drop then ; ok see ul@ : ul@ >r r@ c@ 8 << r@ 1 ca+ c@ + 8 << r@ 2 ca+ c@ + 8 << r> 3 ca+ c@ + ; ok see setup-logo-colors : setup-logo-colors dup la1+ swap l@ /l* over + tuck swap do i l@ lbsplit >r 0 bljoin r> setcolor /l +loop ; ok see cg14-reset-screen : cg14-reset-screen init-color-map sync-on video-on ; ok see init-video-hw : init-video-hw init-pcg init-ics disable-emc-slot-refresh vconfig sam-port-size mbus-freq init-vbc init-dac blend-source mode init-mdi ; ok see disable-emc-slot-refresh : disable-emc-slot-refresh 0 f 4 memmap 1 slot# 2 + << not over l@ and over l! 4 free-virtual ; ok see slot# : slot# video-base-adr >physical drop 1a >> f and ; ok see cg14-toggle-cursor : cg14-toggle-cursor fb8-toggle-cursor toggle-colors? if init-fore/background then ; ok see set-default-font : set-default-font default-font set-font ; ok see logo-data : logo-data logo0-data logo1-data logo2-data logo# pick nip nip nip ; ok see set-logo : set-logo (is) prev-logo random-logo? off ; ok see random-logo : random-logo random-logo? on logo# drop ; ok see logo# : logo# random-logo? @ if prev-logo dup begin 2dup = while drop get-msecs 4 / 3 and 3 mod repeat nip dup (is) prev-logo else prev-logo 3 and then ; ok see random-logo? (ffd68060) random-logo? ( Parameter field: 0 ) ok see prev-logo 0 constant prev-logo ok see logo2-data ffed44d8 constant logo2-data ok see logo1-data ffed74d8 constant logo1-data ok see logo0-data ffef3b20 constant logo0-data ok see compile-bytes : compile-bytes rot 2dup + >r swap move r> ; ok see cg14-selftest : cg14-selftest 0 cg14-memory-test or ; ok see cg14-memory-test : cg14-memory-test frame-buf-offset frame-buf-space fb-test-size ['] do-map-in catch if drop 2drop -1 exit then dup fb-test-size memory-test swap fb-test-size do-map-out ; ok see fb-test-size 200000 constant fb-test-size ok see memory-test : memory-test failed off over dup (ffd4e4b0) mem-base >physical drop (ffd4e4b0) physmem-base over ['] mem-data-test catch if drop -1 then ?fail 2dup ['] mem-addr-test catch if 2drop -1 then ?fail over ['] mem-size-test catch if drop -1 then ?fail diagnostic-mode? if 2dup ['] mem-bits-test catch if 2drop -1 then ?fail 2dup ['] address=data-test catch if 2drop -1 then ?fail then 2drop failed @ ; ok see ?fail : ?fail ?dup if failed @ max failed ! diagnostic-mode? if " -- failed." type cr then else diagnostic-mode? if " -- succeeded." type cr then then ; ok see failed ffef0a30 (ffd461f0) failed value = 0 ok see address=data-test : address=data-test " Address=data test" show-status bounds 2dup do i >membase i mem! /l +loop failed off do i >membase i mem-test /l +loop failed @ ; ok see mem-bits-test : mem-bits-test " Data bits test" show-status failed off bounds 2dup ?do ffffffff i 2dup mem! mem-test /l +loop ?do 0 i 2dup mem! mem-test /l +loop failed @ ; ok see mem-data-test : mem-data-test " Data lines test" show-status failed off 20 0 do 1 i << over mem! 1 i << over mem-test loop 20 0 do 1 i << not over mem! 1 i << not over mem-test /l + loop drop failed @ ; ok see mem-size-test : mem-size-test " Data size test" show-status failed off 1234 over w! 5678 over wa1+ w! 12345678 over mem-test 12 over 0 ca+ c! 34 over 1 ca+ c! 56 over 2 ca+ c! 78 over 3 ca+ c! 12345678 over mem-test drop failed @ ; ok see mem-addr-test : mem-addr-test " Address quick test" show-status failed off tuck bounds add-base ! /l - add-top ! log2 2 do i address-line-test loop failed @ ; ok see log2 : log2 -1 swap 20 0 do dup 80000000 and if nip 1f i - swap (leave) then 1 << loop drop ; ok see address-line-test : address-line-test 0 add-base @ mem! 0 add-top @ mem! 1 over << add-base @ over + ffffffff swap mem! add-top @ over - ffffffff swap mem! 0 add-base @ mem-test 0 add-top @ mem-test ffffffff add-base @ mem! ffffffff add-top @ mem! add-base @ over + 0 swap mem! add-top @ over - 0 swap mem! ffffffff add-base @ mem-test ffffffff add-top @ mem-test 2drop ; ok see add-top ffef0a2c (ffd461f0) add-top value = 0 ok see add-base ffef0a28 (ffd461f0) add-base value = 0 ok see mem-test : mem-test dup mem-address ! mem@ maskit swap maskit ?failed ; ok see ?failed : ?failed 2dup <> if mem-expected ! mem-observed ! failed on .mem-test-failure else 2drop then ; ok see .mem-test-failure : .mem-test-failure ??cr " PA = " type mem-address @ >membase .lx " Exp = " type mem-expected @ dup .lx " Obs = " type mem-observed @ dup .lx " Xor = " type xor .lx ??cr done? if error throw then ; ok see error (ffd68060) error ( Parameter field: 0 ) ok see failed ffef0a30 (ffd461f0) failed value = 0 ok see done? defer done? ( Parameter field: 80 ) ok see .lx : .lx base @ >r 10 base ! <# # # # # 2e hold # # # # #> r> base ! type bl emit ; ok see ??cr : ??cr #out @ if cr then ; ok see >membase : >membase mem-base - physmem-base + ; ok see mem-observed variable mem-observed ( Parameter field: 7c ) ok see mem-expected variable mem-expected ( Parameter field: 78 ) ok see mem-address variable mem-address ( Parameter field: 74 ) ok see mem-base value mem-base ( Parameter field: 70 ) ok see physmem-base value physmem-base ( Parameter field: 6c ) ok see show-status : show-status diagnostic-mode? if type else 2drop then ; ok see maskit : maskit mem-mask @ and ; ok see mem-mask variable mem-mask ( Parameter field: 68 ) ok see mem@ defer mem@ ( Parameter field: 66 ) ok see mem! defer mem! ( Parameter field: 64 ) ok see set-mdi-mode : set-mdi-mode (ffd4e4b0) mode (ffd4e4b0) blend-source ; ok see set-vsimm-parameters : set-vsimm-parameters 200000 of 1 100 endof 400000 of 2 200 endof 800000 of 3 200 old-mdi? 0= if 1 d mdi-c! endof 1000000 of 3 200 old-mdi? 0= if 1 d mdi-c! endof 2 200 endcase (ffd4e4b0) sam-port-size (ffd4e4b0) vconfig old-vbc? if sam-port-size xdrint " sam-port-size" attribute 0 f 20 memmap dup 4 + l@ 1c00 and 6 >> (ffd4e4b0) mihdel 20 free-virtual mihdel xdrint " mih-delay" attribute ; ok see init-dac : init-dac 3 mode! 2 mode! 3 mode! 0 addr! 100 0 do i palette! 0 palette! i palette! 0 palette! i palette! 0 palette! loop new-dac? if 5 5 control! then e0 6 control! 43 7 control! ; ok see control! : control! addr! 200 dac! ; ok see palette! : palette! 100 dac! ; ok see addr! : addr! 0 dac! ; ok see mode! : mode! 300 dac! ; ok see new-dac? : new-dac? b dac@ 8c <> ; ok see dac@ : dac@ video-base-adr 2000 + + c@ ; ok see dac! : dac! video-base-adr 2000 + + c! ; ok see init-vbc : init-vbc 0 video-base-reg! old-vbc? if 20 mihdel + vsclk * swap / - reload-control-reg! else 2drop 2 << 1 or 4 vbc! then 251 video-control-reg! ; ok see video-control-reg! : video-control-reg! 400 or 8 vbc! ; ok see reload-control-reg! : reload-control-reg! swap 9 << or 4 vbc! ; ok see video-base-reg! : video-base-reg! 0 vbc! ; ok see old-vbc? : old-vbc? c vbc@ a >> 3 and 0= ; ok see vbc@ : vbc@ video-base-adr 200 + + l@ ; ok see vbc! : vbc! video-base-adr 200 + + l! ; ok see init-ics : init-ics sync-off old-mdi? if init-ics-old else init-ics-new then 1f4 ms ; ok see init-ics-old : init-ics-old pixfreq >ics-freq 1 ics! d0 0 do i ics! dup c@ 1 or ics! 1 + 10 +loop drop 20 0 do f0 ics! 1 ics! loop 3 ics! ; ok see init-ics-new : init-ics-new pixfreq >ics-freq 6 ics! d0 0 do i 4 or ics! dup c@ 6 or ics! 1 + 10 +loop drop 20 0 do f4 ics! 6 ics! loop ; ok see ics! : ics! 7 mdi-c! ; ok see >ics-freq : >ics-freq f4240 / ics-freq-table >r begin r@ while dup r@ w@ r@ 6 + w@ within if drop r> /w + @ exit then r> 6 + >r repeat r> 2drop ics-freq-table /w + @ ; ok see ics-freq-table (ffd68060) ics-freq-table ( Parameter field: 0 ) ok see ics-216mhz (ffd68060) ics-216mhz ( Parameter field: 3000 ) ok see ics-189mhz (ffd68060) ics-189mhz ( Parameter field: 2000 ) ok see ics-135mhz (ffd68060) ics-135mhz ( Parameter field: 3000 ) ok see ics-117mhz (ffd68060) ics-117mhz ( Parameter field: 2000 ) ok see ics-108mhz (ffd68060) ics-108mhz ( Parameter field: 3000 ) ok see ics-94mhz (ffd68060) ics-94mhz ( Parameter field: 2000 ) ok see ics-84mhz (ffd68060) ics-84mhz ( Parameter field: 3000 ) ok see ics-81mhz (ffd68060) ics-81mhz ( Parameter field: 6000 ) ok see ics-74mhz (ffd68060) ics-74mhz ( Parameter field: 5000 ) ok see ics-64mhz (ffd68060) ics-64mhz ( Parameter field: 3000 ) ok see ics-54mhz (ffd68060) ics-54mhz ( Parameter field: 4000 ) ok see ics-47mhz (ffd68060) ics-47mhz ( Parameter field: 5000 ) ok see init-pcg : init-pcg pixfreq >pcg-regval pcg! ; ok see pcg! : pcg! video-base-adr 100 + c! ; ok see >pcg-regval : >pcg-regval pcg-table a 0 do dup @ 2 pick > if (leave) else /pcg-entry + then loop pcg-table 2dup = if /n + @ nip nip exit else drop then pcg-table /pcg-entry 9 * + 2dup > if /n + @ nip nip exit else drop then swap >r dup /pcg-entry - @ r@ swap - over @ r> - < if /pcg-entry - then /n + @ ; ok see /pcg-entry 8 constant /pcg-entry ok see pcg-table (ffd68060) pcg-table ( Parameter field: 2d0 ) ok see cg14-blink-screen : cg14-blink-screen video-off 20 ms video-on ; ok see init-mdi : init-mdi 8 of 0 mctl! ppr! endof 10 of 20 mctl! ff 0 do dup i xlut! loop drop endof 20 of 30 mctl! ff 0 do dup i xlut! loop drop endof 0 mctl! ppr! endcase init-color-map mod@ f7 and mod! mdi-hbs 18 timing! mdi-hbc 1a timing! mdi-hss 1c timing! mdi-hsc 1e timing! mdi-csc 20 timing! mdi-vbs 22 timing! mdi-vbc 24 timing! mdi-vss 26 timing! mdi-vsc 28 timing! old-mdi? if mdi-xcs 2a timing! mdi-xcc 2c timing! then csc=hsc? if mdi-hsc 20 timing! then vsync? if mod@ 8 or mod! then ; ok see video-on : video-on mctl@ 41 or mctl! ; ok see video-off : video-off mctl@ 40 not and mctl! ; ok see sync-off : sync-off mctl@ 1 not and mctl! ; ok see sync-on : sync-on mctl@ 1 or mctl! 1f4 ms ; ok see mdi-xcc : mdi-xcc mdi-hbc pixfreq 4 * mbus-freq / - 2 - 0 max ; ok see mdi-xcs : mdi-xcs mdi-hbs pixfreq 8 * mbus-freq / - 1 - 0 max ; ok see mdi-vss : mdi-vss vfporch 1 - 0 max ; ok see mdi-vsc : mdi-vsc vfporch vsync + 1 - 0 max ; ok see mdi-vbc : mdi-vbc vfporch vsync + vbporch + 1 - 0 max ; ok see mdi-vbs : mdi-vbs vfporch vsync + vbporch + vres + 1 - 0 max ; ok see mdi-csc : mdi-csc hfporch hbporch + hres + 4 / 1 - 0 max ; ok see mdi-hss : mdi-hss hfporch 4 / 1 - 0 max ; ok see mdi-hsc : mdi-hsc hfporch hsync + 4 / 1 - 0 max ; ok see mdi-hbc : mdi-hbc hfporch hsync + hbporch + 4 / 1 - 0 max ; ok see mdi-hbs : mdi-hbs hfporch hsync + hbporch + hres + 4 / 1 - 0 max ; ok see vsclk : vsclk pixfreq input-size / 2 * mode * ; ok see monitor-sense@ : monitor-sense@ mstat@ e and 1 >> ; ok see timing! : timing! video-base-adr + w! ; ok see mod! : mod! c mdi-c! ; ok see mod@ : mod@ c mdi-c@ ; ok see mstat@ : mstat@ 4 mdi-c@ ; ok see ppr@ : ppr@ 1 mdi-c@ ; ok see ppr! : ppr! 1 mdi-c! ; ok see old-mdi? : old-mdi? 6 mdi-c@ 4 >> 0= ; ok see mctl@ : mctl@ 0 mdi-c@ ; ok see mctl! : mctl! 0 mdi-c! ; ok see mdi-c@ : mdi-c@ video-base-adr + c@ ; ok see mdi-c! : mdi-c! video-base-adr + c! ; ok see input-size 80 constant input-size ok see toggle-colors? value toggle-colors? ( Parameter field: 60 ) ok see init-color-map : init-color-map init-fore/background setup-color-lookup ; ok see setup-color-lookup : setup-color-lookup black 0 setcolors red 10 setcolors green 20 setcolors yellow 30 setcolors blue 40 setcolors magenta 50 setcolors cyan 60 setcolors white 70 setcolors black 88 setcolors16 cyan 89 setcolors16 magenta 8a setcolors16 blue 8b setcolors16 yellow 8c setcolors16 green 8d setcolors16 red 8e setcolors16 white 8f setcolors16 ; ok see setcolors16 : setcolors16 100 swap ?do dup i set-color 10 +loop drop ; ok see setcolors : setcolors 8 bounds ?do dup i set-color loop drop ; ok see set-color : set-color dup 0 = if over (ffd4e4b0) foregnd then dup 70 = if over (ffd4e4b0) backgnd then setcolor ; ok see init-fore/background : init-fore/background backgnd 70 setcolor backgnd ff setcolor foregnd 0 setcolor foregnd 88 setcolor ; ok see backgnd value backgnd ( Parameter field: 5c ) ok see foregnd value foregnd ( Parameter field: 58 ) ok see sun-blue b44164 constant sun-blue ok see white 0 constant white ok see cyan ffff00 constant cyan ok see magenta ff00ff constant magenta ok see blue ff0000 constant blue ok see yellow ffff constant yellow ok see green ff00 constant green ok see red ff constant red ok see black ffffff constant black ok see setcolor : setcolor tuck color! blend-source swap xlut! ; ok see color@ : color@ 2 << video-base-adr 4000 + + l@ ; ok see color! : color! 2 << video-base-adr 4000 + + l! ; ok see xlut! : xlut! video-base-adr 3000 + + c! ; ok see monitor-attributes : monitor-attributes mode " depth" integer-attribute mode hres * 8 / " linebytes" integer-attribute hres " width" integer-attribute vres " height" integer-attribute vfreq " vfreq" integer-attribute pixfreq " pixfreq" integer-attribute hfporch " hfporch" integer-attribute vfporch " vfporch" integer-attribute hsync " hsync" integer-attribute vsync " vsync" integer-attribute hbporch " hbporch" integer-attribute vbporch " vbporch" integer-attribute ; ok see set-monitor-parameters : set-monitor-parameters 0 (ffd4e4b0) csc=hsc? 0 (ffd4e4b0) vsync? b of r1920x1080x72 -1 (ffd4e4b0) csc=hsc? -1 (ffd4e4b0) vsync? endof a of r1024x768x70 endof 9 of r1280x1024x66 endof 8 of r1600x1280x66 endof 7 of r1152x900x66 endof 6 of r1152x900x76 endof 5 of r1024x768x60 endof 4 of r1152x900x76 endof 3 of r1152x900x66 endof 2 of r1280x1024x76m endof 1 of r1600x1280x76m endof 0 of r1024x768x60 endof drop r1152x900x66 0 endcase set-mon-params ; ok see integer-attribute : integer-attribute 2dup get-my-attribute if rot xdrint 2swap attribute else 2swap drop 2drop ! then ; ok see r1920x1080x72 : r1920x1080x72 780 438 48 cdfe600 d8 3 178 56 30 3 ; ok see r1024x768x70 : r1024x768x70 400 300 46 46cf710 88 6 88 20 10 2 ; ok see r1280x1024x66 : r1280x1024x66 500 400 42 70a71c8 40 8 118 29 18 2 ; ok see r1600x1280x66 : r1600x1280x66 640 500 42 bebc200 100 a 180 2c 0 0 ; ok see r1024x768x66 : r1024x768x66 400 300 42 4323800 7c 5 a0 27 4 1 ; ok see r1152x900x76 : r1152x900x76 480 384 4c 66ff300 40 8 104 21 1c 2 ; ok see r1152x900x66 : r1152x900x66 480 384 42 5a1f4a0 40 8 110 1b 28 2 ; ok see r1280x1024x76m : r1280x1024x76m 500 400 4c 80befc0 40 8 120 20 20 2 ; ok see r1600x1280x76m : r1600x1280x76m 640 500 4c cdfe600 48 8 1b8 32 8 2 ; ok see r1024x768x60 : r1024x768x60 400 300 3c 3d27848 80 6 a0 1d 10 2 ; ok see set-mon-params : set-mon-params (ffd4e4b0) vfporch (ffd4e4b0) hfporch (ffd4e4b0) vbporch (ffd4e4b0) hbporch (ffd4e4b0) vsync (ffd4e4b0) hsync (ffd4e4b0) pixfreq (ffd4e4b0) vfreq (ffd4e4b0) vres (ffd4e4b0) hres ; ok see vsync? value vsync? ( Parameter field: 54 ) ok see csc=hsc? value csc=hsc? ( Parameter field: 50 ) ok see vbporch value vbporch ( Parameter field: 4c ) ok see vsync : vsync -1 (ffd4e4b0) vsync? ; ok see vfporch value vfporch ( Parameter field: 44 ) ok see hbporch value hbporch ( Parameter field: 40 ) ok see hsync value hsync ( Parameter field: 3c ) ok see hfporch value hfporch ( Parameter field: 38 ) ok see vfreq value vfreq ( Parameter field: 34 ) ok see vres value vres ( Parameter field: 30 ) ok see hres value hres ( Parameter field: 2c ) ok see pixfreq value pixfreq ( Parameter field: 28 ) ok see frame-buf-unmap : frame-buf-unmap frame-buffer-adr /frame do-map-out 0 (ffd4e4b0) frame-buffer-adr ; ok see frame-buf-map : frame-buf-map frame-buf-offset frame-buf-space /frame do-map-in (ffd4e4b0) frame-buffer-adr ; ok see video-unmap : video-unmap video-base-adr /video-io do-map-out -1 (ffd4e4b0) video-base-adr ; ok see video-map : video-map video-io-offset video-io-space /video-io do-map-in (ffd4e4b0) video-base-adr ; ok see do-map-out : do-map-out " map-out" $call-parent ; ok see do-map-in : do-map-in " map-in" $call-parent ; ok see video-base-adr value video-base-adr ( Parameter field: 24 ) ok see mbus-freq value mbus-freq ( Parameter field: a240000 ) ok see mihdel value mihdel ( Parameter field: 20 ) ok see sam-port-size value sam-port-size ( Parameter field: 1c ) ok see vconfig value vconfig ( Parameter field: 18 ) ok see blend-source value blend-source ( Parameter field: 14 ) ok see mode value mode ( Parameter field: 10 ) ok see /video-io 10000 constant /video-io ok see video-io-space 2 constant video-io-space ok see video-io-offset 0 constant video-io-offset ok see /frame 400000 constant /frame ok see frame-buf-space 4 constant frame-buf-space ok see frame-buf-offset 0 constant frame-buf-offset ok