8bitworkshop/gen/vcs-M62THH5P.js

20 lines
12 KiB
JavaScript

import{a as E}from"./chunk-ADS54WVP.js";import{a as A}from"./chunk-ZE6LZV4I.js";import{A as y,G as k,a as P,m as x,n as C,w as R}from"./chunk-ULPRULB6.js";import{E as d,J as m,N as v,R as f,T as S,V as b,a as s,g as c,h as u}from"./chunk-RXF2JDJ3.js";import"./chunk-WAARL7ET.js";var p=[{id:"examples/hello.a",chapter:4,name:"Hello 6502 and TIA"},{id:"examples/vsync.a",chapter:5,name:"Painting on the CRT",title:"Color Bars"},{id:"examples/playfield.a",chapter:6,name:"Playfield Graphics"},{id:"examples/sprite.a",chapter:7,name:"Players and Sprites"},{id:"examples/colorsprites.a",chapter:8,name:"Color Sprites"},{id:"examples/timing2.a",chapter:9,name:"Fine Positioning",title:"Fine Position"},{id:"examples/missiles.a",chapter:10,name:"Player/Missile Graphics",title:"Player/Missile"},{id:"examples/sethorizpos.a",chapter:11,name:"SetHorizPos Routine"},{id:"examples/piatimer.a",chapter:12,name:"PIA Timer"},{id:"examples/controls.a",chapter:13,name:"Joysticks"},{id:"examples/complexscene.a",chapter:15,name:"Complex Scene I"},{id:"examples/complexscene2.a",chapter:16,name:"Complex Scene II"},{id:"examples/scoreboard.a",chapter:18,name:"Scoreboard"},{id:"examples/collisions.a",chapter:19,name:"Collisions"},{id:"examples/bitmap.a",chapter:20,name:"Async Playfield: Bitmap",title:"Async PF Bitmap"},{id:"examples/brickgame.a",chapter:21,name:"Async Playfield: Bricks",title:"Async PF Bricks"},{id:"examples/bigsprite.a",chapter:22,name:"A Big 48-Pixel Sprite",title:"48-Pixel Sprite"},{id:"examples/tinyfonts2.a",chapter:23,name:"Tiny Text"},{id:"examples/score6.a",chapter:24,name:"6-Digit Score"},{id:"examples/retrigger.a",chapter:26,name:"Sprite Formations"},{id:"examples/multisprite3.a",chapter:28,name:"Multisprites"},{id:"examples/procgen1.a",chapter:30,name:"Procedural Generation"},{id:"examples/lines.a",chapter:31,name:"Drawing Lines"},{id:"examples/musicplayer.a",chapter:32,name:"Music Player"},{id:"examples/road.a",chapter:33,name:"Pseudo 3D Road"},{id:"examples/bankswitching.a",chapter:35,name:"Bankswitching"},{id:"examples/wavetable.a",chapter:36,name:"Wavetable Sound"},{id:"examples/pal.a",name:"PAL Video Output"},{id:"examples/fracpitch.a",name:"Fractional Pitch",category:"BASIC and Other Languages"},{id:"bb/helloworld.bas",name:"Hello World (batariBASIC)"},{id:"bb/draw.bas",name:"Playfield Draw (batariBASIC)"},{id:"bb/sample.bas",name:"Sprite Test (batariBASIC)"},{id:"bb/FIFA1977.bas",name:"2P Soccer Game (batariBASIC)"},{id:"bb/duck_chase.bas",name:"Duck Chase (batariBASIC)"},{id:"wiz/finalduck.wiz",name:"Final Duck (Wiz)"},{id:"vcslib/demo_vcslib.c",name:"VCSLib Demo (C)"}];function g(n){return n.endsWith("-llvm.c")?"remote:llvm-mos":n.endsWith(".wiz")?"wiz":n.endsWith(".bb")||n.endsWith(".bas")?"bataribasic":n.endsWith(".ca65")?"ca65":n.endsWith(".acme")?"acme":n.endsWith(".c")?"cc65":n.endsWith(".ecs")?"ecs":"dasm"}var T=class extends R{constructor(){super(...arguments);this.machine={cpuCyclesPerLine:76};this.getToolForFilename=g;this.getMemoryMap=function(){return{main:[{name:"TIA Registers",start:0,size:128,type:"io"},{name:"PIA RAM",start:128,size:128,type:"ram"},{name:"PIA Ports and Timer",start:640,size:24,type:"io"},{name:"Cartridge ROM",start:61440,size:4096-6,type:"rom"},{name:"CPU Vectors",start:65530,size:6,type:"rom"}]}};this.nullProbe=new C;this.probe=this.nullProbe}getPresets(){return p}async start(){var e=this;await d("javatari/javatari.js"),Javatari.AUTO_START=!1,Javatari.SHOW_ERRORS=!1,Javatari.CARTRIDGE_CHANGE_DISABLED=!0,Javatari.DEBUG_SCANLINE_OVERFLOW=!1,Javatari.AUDIO_BUFFER_SIZE=256,$("#javatari-div").show(),Javatari.start();var a=Javatari.room.console;a.oldClockPulse=a.clockPulse,a.clockPulse=function(){e.updateRecorder(),e.probe.logNewFrame(),this.oldClockPulse(),Javatari.room.console.getCPUState().o==2&&Javatari.room.console.onBreakpointHit!=null&&Javatari.room.console.onBreakpointHit(Javatari.room.console.saveState())};var t=a.tia.getVideoOutput();t.oldNextLine=t.nextLine,t.nextLine=function(i,l){return e.probe.logNewScanline(),this.oldNextLine(i,l)};var r=$("#javatari-screen").find("canvas")[0];new ResizeObserver(i=>{this.resize()}).observe(r),this.canvas=r}loadROM(e,a){if(a.length==0||(a.length&1023)!=0)throw new S("Invalid ROM length: "+a.length);var t=this.isRunning();if(Javatari.loadROM(e,a),!this.isRunning())throw Error("Could not load ROM");t||this.pause()}getOpcodeMetadata(e,a){return Javatari.getOpcodeMetadata(e,a)}getRasterPosition(){var e=Javatari.room.console.getClocksFromFrameStart()-1,a=Math.floor(e/76),t=e-a*76,r=t*3,o=a;return{x:r,y:o,clk:e%76}}getRasterScanline(){return this.getRasterPosition().y}getRasterLineClock(){return this.getRasterPosition().x}getRasterCanvasPosition(){let e=Javatari.room.console.tia.getVideoOutput().monitor.getDisplayParameters(),{x:a,y:t}=this.getRasterPosition(),r={x:(a-e.displayOriginX)*e.displayWidth*e.displayScaleX/(e.signalWidth-e.displayOriginX),y:(t-e.displayOriginY)*e.displayHeight*e.displayScaleY/e.displayHeight};return console.log(a,t,r,e),r}isRunning(){return Javatari.room&&Javatari.room.console.isRunning()}pause(){Javatari.room.console.pause(),Javatari.room.speaker.mute()}resume(){Javatari.room.console.go(),Javatari.room.speaker.powerOff(),Javatari.room.speaker.powerOn()}advance(){return Javatari.room.console.clockPulse(),0}nextFrame(){Javatari.room.console.clockPulse()}step(){Javatari.room.console.debugSingleStepCPUClock()}stepBack(){Javatari.room.console.debugStepBackInstruction()}runEval(e){Javatari.room.console.debugEval(e)}setupDebug(e){Javatari.room.console.onBreakpointHit=a=>{a.c.PC=a.c.PC-1&65535,this.fixState(a),Javatari.room.console.pause(),Javatari.room.speaker.mute(),this.lastBreakState=a,e(a),setTimeout(()=>this.updateVideoDebugger(),100)},Javatari.room.speaker.mute()}isDebugging(){return Javatari.room.console.onBreakpointHit!=null}clearDebug(){this.lastBreakState=null,Javatari.room.console.disableDebug(),Javatari.room.console.onBreakpointHit=null,this.isRunning()&&Javatari.room.speaker.play()}reset(){Javatari.room.console.powerOff(),Javatari.room.console.resetDebug(),Javatari.room.console.powerOn(),Javatari.room.speaker.play()}getOriginPC(){return(this.readAddress(65532)|this.readAddress(65533)<<8)&65535}newCodeAnalyzer(){return new E(this)}saveState(){var e=Javatari.room.console.saveState();return this.fixState(e),e}fixState(e){var t,r,o;if(((t=e.ca)==null?void 0:t.f)!="3E"&&((r=e.ca)==null?void 0:r.f)!="3F"){var a=((o=e.ca)==null?void 0:o.bo)||0;e.c.EPC=e.c.PC+a}}loadState(e){return Javatari.room.console.loadState(e)}getCPUState(){return Javatari.room.console.getCPUState()}saveControlsState(){return Javatari.room.console.saveControlsState()}loadControlsState(e){Javatari.room.console.loadControlsState(e)}readAddress(e){return this.lastBreakState&&e>=128&&e<256?this.getRAMForState(this.lastBreakState)[e&127]:(e&4736)==640?0:Javatari.room.console.readAddress(e)}writeAddress(e,a){Javatari.room.console.writeAddress(e,a)}runUntilReturn(){var e=1;this.runEval(a=>e<=0&&a.T==0?!0:(a.o==32?e++:(a.o==96||a.o==64)&&--e,!1))}runToVsync(){this.advance(),this.runEval(e=>!0)}cpuStateToLongString(e){return y(e)}getRAMForState(e){return jt.Util.byteStringToUInt8Array(atob(e.r.b))}ramStateToLongString(e){var a=this.getRAMForState(e);return`
`+b(a,128,128)}getDefaultExtension(){return".dasm"}getROMExtension(){return".a26"}getDebugCategories(){return["CPU","Stack","PIA","TIA"]}getDebugInfo(e,a){switch(e){case"CPU":return this.cpuStateToLongString(a.c)+this.bankSwitchStateToString(a);case"Stack":return k(this,this.getRAMForState(a),256,511,256+a.c.SP,32);case"PIA":return this.ramStateToLongString(a)+`
`+this.piaStateToLongString(a.p);case"TIA":return this.tiaStateToLongString(a.t)}}bankSwitchStateToString(e){var a,t;return((a=e.ca)==null?void 0:a.ro)>=0?"RAMOffset "+c(e.ca.ro,4)+`
`:((t=e.ca)==null?void 0:t.bo)>=0?"BankOffset "+c(e.ca.bo,4)+`
`:""}piaStateToLongString(e){return"Timer "+e.t+"/"+e.c+`
INTIM $`+c(e.IT,2)+" ("+e.IT+`)
INSTAT $`+c(e.IS,2)+`
`}tiaStateToLongString(e){var a=this.getRasterPosition(),t="";t+="H"+s(a.x.toString(),5)+" (clk "+s(a.clk.toString(),3)+") V"+s(a.y.toString(),5)+" ",t+=(e.vs?"VSYNC ":"- ")+(e.vb?"VBLANK ":"- ")+`
`,t+=`
`,t+="Playfield "+e.f+`
`,t+=" "+(e.fr?"REFLECT ":"- ")+(e.fs?"SCOREMODE ":"- ")+(e.ft?"PRIORITY ":"- ")+`
`;for(var r=0;r<2;r++){var o="p"+r;t+="Player"+r+s(u(e[o]),11)+s(u(e[o+"d"]),11)+`
`}t+=`
`,t+=` Count Scan Speed
`;for(var r=0;r<2;r++){var o="p"+r;t+="Player"+r+s(e[o+"co"],8)+s(h(e[o+"sc"]),5)+s(e[o+"ss"],6),t+=" "+(e[o+"rr"]?"RESET":"")+" "+(e[o+"v"]?"DELAY":"")+" "+(e[o+"cc"]?"CLOSECOPY":"")+" "+(e[o+"mc"]?"MEDCOPY":"")+" "+(e[o+"wc"]?"WIDECOPY":"")+" "+(e[o+"r"]?"REFLECT":"")+`
`}for(var r=0;r<2;r++){var o="m"+r;t+="Missile"+r+s(e[o+"co"],7)+s(h(e[o+"sc"]),5)+s(e[o+"ss"],6),t+=" "+(e[o+"rr"]?"RESET":"")+" "+(e[o+"r"]?"RESET2PLAYER":"")+`
`}return t+="Ball"+s(e.bco,11)+s(h(e.bsc),5)+s(e.bss,6)+`
`,t}disassemble(e,a){return P(e,a(e),a(e+1),a(e+2))}showHelp(){return"https://8bitworkshop.com/docs/platforms/vcs/"}startProbing(){var e=this,a=new x(this);this.connectProbe(a);var t=this.probe,r=Javatari.room.console.cpu;r.oldCPUClockPulse==null&&(r.oldCPUClockPulse=r.clockPulse,r.clockPulse=function(){r.isPCStable()&&t.logExecute(r.getPC(),r.getSP()),this.oldCPUClockPulse(),t.logClocks(1)});var o=Javatari.room.console.bus;return o.oldRead==null&&(o.oldRead=o.read,o.read=function(i){var l=this.oldRead(i);return i>0&&i<128||i>640&&i<768?t.logIORead(i,l):t.logRead(i,l),l},o.oldWrite=o.write,o.write=function(i,l){this.oldWrite(i,l),i==2?t.logWait(i):i<128||i>640&&i<768?t.logIOWrite(i,l):t.logWrite(i,l)}),a}stopProbing(){this.connectProbe(null);var e=Javatari.room.console.cpu;e.oldCPUClockPulse!=null&&(e.clockPulse=e.oldCPUClockPulse,e.oldCPUClockPulse=null);var a=Javatari.room.console.bus;a.oldRead&&(a.read=a.oldRead,a.oldRead=null),a.oldWrite&&(a.write=a.oldWrite,a.oldWrite=null)}connectProbe(e){this.probe=e||this.nullProbe}resize(){var e=Math.min(1,($("#emulator").width()-24)/640),a=(1-e)*50;$("#javatari-div").css("transform",`translateX(-${a}%) translateY(-${a}%) scale(${e})`)}updateVideoDebugger(){var t;let{x:e,y:a}=this.getRasterCanvasPosition();if(e>=0||a>=0){let r=(t=this.canvas)==null?void 0:t.getContext("2d");r&&f(r,e,a,2)}}};function h(n){return n<0?"-":n.toString()}var J=class extends A{constructor(){super(...arguments);this.start=function(){this.startModule(this.mainElement,{jsfile:"mame8bitws.js",driver:"a2600",width:176*2,height:223,romfn:"/emulator/cart.rom",romsize:4096})};this.loadROM=function(e,a){this.loadROMFile(a),this.loadRegion(":cartslot:cart:rom",a)};this.getPresets=function(){return p};this.getToolForFilename=g;this.getOriginPC=function(){return(this.readAddress(65532)|this.readAddress(65533)<<8)&65535}}getDefaultExtension(){return".dasm"}getROMExtension(){return".a26"}},w=class{constructor(e){this.running=!1;this.getToolForFilename=g;this.mainElement=e}async start(){await d("lib/stellerator/stellerator-embedded.min.js");let e=window.$6502;this.Stellerator=e.Stellerator;let a=v(window.document,this.mainElement,28,20);a.style.padding="10px",this.stellerator=new this.Stellerator(a,"lib/stellerator/stellerator.min.js",{gamma:.8,scalingMode:this.Stellerator.ScalingMode.qis,tvEmulation:this.Stellerator.TvEmulation.composite,phosphorLevel:.25,scanlineLevel:.2,keyboardTarget:this.mainElement})}loadROM(e,a){this.stellerator.run(a,this.Stellerator.TvMode.ntsc)}reset(){this.stellerator.reset()}pause(){this.running=!1,this.stellerator.pause()}resume(){this.running=!0,this.stellerator.resume()}isRunning(){return this.running}getDefaultExtension(){return".dasm"}getROMExtension(){return".a26"}getPresets(){return p}};m.vcs=T;m["vcs.mame"]=J;m["vcs.stellerator"]=w;
//# sourceMappingURL=vcs-M62THH5P.js.map