mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-02-18 15:30:54 +00:00
don't save to local storage unless edited; handle running out of local storage
This commit is contained in:
parent
a087e6b7cf
commit
56677a25e9
102
presets/nes-conio/ex0.asm
Normal file
102
presets/nes-conio/ex0.asm
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
|
||||||
|
;;;;; CONSTANTS
|
||||||
|
|
||||||
|
PPU_CTRL equ $2000
|
||||||
|
PPU_MASK equ $2001
|
||||||
|
PPU_STATUS equ $2002
|
||||||
|
PPU_SCROLL equ $2005
|
||||||
|
PPU_ADDR equ $2006
|
||||||
|
PPU_DATA equ $2007
|
||||||
|
DMC_FREQ equ $4010
|
||||||
|
|
||||||
|
;;;;; CARTRIDGE FILE HEADER
|
||||||
|
|
||||||
|
processor 6502
|
||||||
|
seg Header
|
||||||
|
org $7FF0
|
||||||
|
|
||||||
|
NES_MAPPER equ 0 ;mapper number
|
||||||
|
NES_PRG_BANKS equ 2 ;number of 16K PRG banks, change to 2 for NROM256
|
||||||
|
NES_CHR_BANKS equ 1 ;number of 8K CHR banks (0 = RAM)
|
||||||
|
NES_MIRRORING equ 1 ;0 horizontal, 1 vertical, 8 four screen
|
||||||
|
|
||||||
|
.byte $4e,$45,$53,$1a ; header
|
||||||
|
.byte NES_PRG_BANKS
|
||||||
|
.byte NES_CHR_BANKS
|
||||||
|
.byte NES_MIRRORING|(NES_MAPPER<<4)
|
||||||
|
.byte NES_MAPPER&$f0
|
||||||
|
|
||||||
|
;;;;; CODE
|
||||||
|
|
||||||
|
seg Code
|
||||||
|
org $8000
|
||||||
|
start:
|
||||||
|
_exit:
|
||||||
|
sei ;disable IRQs
|
||||||
|
cld ;decimal mode not supported
|
||||||
|
ldx #$ff
|
||||||
|
txs ;set up stack pointer
|
||||||
|
inx ;increment X to 0
|
||||||
|
stx PPU_MASK ;disable rendering
|
||||||
|
stx DMC_FREQ ;disable DMC interrupts
|
||||||
|
stx PPU_CTRL ;disable NMI interrupts
|
||||||
|
jsr WaitSyncSafe ;wait for VSYNC
|
||||||
|
; clear RAM -- not a subroutine because we clear the stack too
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
|
.loop
|
||||||
|
sta $0,x
|
||||||
|
sta $100,x
|
||||||
|
; skip $200-$2FF, used for OAM display list
|
||||||
|
sta $300,x
|
||||||
|
sta $400,x
|
||||||
|
sta $500,x
|
||||||
|
sta $600,x
|
||||||
|
sta $700,x
|
||||||
|
inx
|
||||||
|
bne .loop
|
||||||
|
; wait for PPU warmup
|
||||||
|
jsr WaitSync
|
||||||
|
; set palette background
|
||||||
|
ldy #$0
|
||||||
|
lda #$3f
|
||||||
|
sta PPU_ADDR
|
||||||
|
sty PPU_ADDR
|
||||||
|
lda #$1c
|
||||||
|
sta PPU_DATA
|
||||||
|
; enable PPU rendering
|
||||||
|
lda #0
|
||||||
|
sta PPU_ADDR
|
||||||
|
sta PPU_ADDR ;PPU addr = 0
|
||||||
|
sta PPU_SCROLL
|
||||||
|
sta PPU_SCROLL ;scroll = 0
|
||||||
|
lda #$90
|
||||||
|
sta PPU_CTRL ;enable NMI
|
||||||
|
lda #$1e
|
||||||
|
sta PPU_MASK ;enable rendering
|
||||||
|
.endless
|
||||||
|
jmp .endless ;endless loop
|
||||||
|
|
||||||
|
;;;;; SUBROUTINES
|
||||||
|
|
||||||
|
; wait for VSYNC to start
|
||||||
|
WaitSyncSafe: subroutine
|
||||||
|
bit PPU_STATUS
|
||||||
|
WaitSync:
|
||||||
|
bit PPU_STATUS
|
||||||
|
bpl WaitSync
|
||||||
|
rts
|
||||||
|
|
||||||
|
;;;;; INTERRUPT HANDLERS
|
||||||
|
|
||||||
|
nmi:
|
||||||
|
irq:
|
||||||
|
rti
|
||||||
|
|
||||||
|
;;;;; CPU VECTORS
|
||||||
|
|
||||||
|
org $fffa
|
||||||
|
.word nmi ;$fffa vblank nmi
|
||||||
|
.word start ;$fffc reset
|
||||||
|
.word irq ;$fffe irq / brk
|
||||||
|
|
@ -4,16 +4,13 @@
|
|||||||
PPU_CTRL equ $2000
|
PPU_CTRL equ $2000
|
||||||
PPU_MASK equ $2001
|
PPU_MASK equ $2001
|
||||||
PPU_STATUS equ $2002
|
PPU_STATUS equ $2002
|
||||||
PPU_OAM_ADDR equ $2003
|
OAM_ADDR equ $2003
|
||||||
PPU_OAM_DATA equ $2004
|
OAM_DATA equ $2004
|
||||||
PPU_SCROLL equ $2005
|
PPU_SCROLL equ $2005
|
||||||
PPU_ADDR equ $2006
|
PPU_ADDR equ $2006
|
||||||
PPU_DATA equ $2007
|
PPU_DATA equ $2007
|
||||||
PPU_OAM_DMA equ $4014
|
PPU_OAM_DMA equ $4014
|
||||||
PPU_FRAMECNT equ $4017
|
|
||||||
DMC_FREQ equ $4010
|
DMC_FREQ equ $4010
|
||||||
CTRL_PORT1 equ $4016
|
|
||||||
CTRL_PORT2 equ $4017
|
|
||||||
|
|
||||||
;;;;; ZERO-PAGE VARIABLES
|
;;;;; ZERO-PAGE VARIABLES
|
||||||
|
|
||||||
@ -45,16 +42,33 @@ NES_MIRRORING equ 1 ;0 horizontal, 1 vertical, 8 four screen
|
|||||||
org $8000
|
org $8000
|
||||||
start:
|
start:
|
||||||
_exit:
|
_exit:
|
||||||
sei
|
sei ;disable IRQs
|
||||||
|
cld ;decimal mode not supported
|
||||||
ldx #$ff
|
ldx #$ff
|
||||||
txs
|
txs ;set up stack pointer
|
||||||
inx ;X=0
|
inx ;increment X to 0
|
||||||
stx PPU_MASK ;disable rendering
|
stx PPU_MASK ;disable rendering
|
||||||
stx DMC_FREQ ;disable DMC (samples)
|
stx DMC_FREQ ;disable DMC interrupts
|
||||||
stx PPU_CTRL ;disable NMI (interrupts)
|
stx PPU_CTRL ;disable NMI interrupts
|
||||||
jsr WaitSync ;wait for VSYNC
|
jsr WaitSyncSafe ;wait for VSYNC
|
||||||
|
; clear RAM -- not a subroutine because we clear the stack too
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
|
.loop
|
||||||
|
sta $0,x
|
||||||
|
sta $100,x
|
||||||
|
; skip $200-$2FF, used for OAM display list
|
||||||
|
sta $300,x
|
||||||
|
sta $400,x
|
||||||
|
sta $500,x
|
||||||
|
sta $600,x
|
||||||
|
sta $700,x
|
||||||
|
inx
|
||||||
|
bne .loop
|
||||||
|
; end of clear RAM routine
|
||||||
jsr SetPalette ;set colors
|
jsr SetPalette ;set colors
|
||||||
jsr ClearVRAM ;clear VRAM
|
jsr FillVRAM ;set PPU RAM
|
||||||
|
jsr WaitSync ;wait for VSYNC (and PPU warmup)
|
||||||
lda #0
|
lda #0
|
||||||
sta PPU_ADDR
|
sta PPU_ADDR
|
||||||
sta PPU_ADDR ;PPU addr = 0
|
sta PPU_ADDR ;PPU addr = 0
|
||||||
@ -84,8 +98,8 @@ SetPalette: subroutine
|
|||||||
bne .loop
|
bne .loop
|
||||||
rts
|
rts
|
||||||
|
|
||||||
; clear video RAM
|
; fill video RAM
|
||||||
ClearVRAM: subroutine
|
FillVRAM: subroutine
|
||||||
txa
|
txa
|
||||||
ldy #$20
|
ldy #$20
|
||||||
sty PPU_ADDR
|
sty PPU_ADDR
|
||||||
@ -101,11 +115,11 @@ ClearVRAM: subroutine
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
; wait for VSYNC to start
|
; wait for VSYNC to start
|
||||||
WaitSync: subroutine
|
WaitSyncSafe: subroutine
|
||||||
bit PPU_STATUS
|
bit PPU_STATUS
|
||||||
.1:
|
WaitSync:
|
||||||
bit PPU_STATUS
|
bit PPU_STATUS
|
||||||
bpl .1
|
bpl WaitSync
|
||||||
rts
|
rts
|
||||||
|
|
||||||
;;;;; INTERRUPT HANDLERS
|
;;;;; INTERRUPT HANDLERS
|
||||||
|
@ -8,10 +8,11 @@ var NES_NESLIB_PRESETS = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
var NES_CONIO_PRESETS = [
|
var NES_CONIO_PRESETS = [
|
||||||
{id:'hello.c', name:'Hello PPU'},
|
{id:'ex0.asm', name:'ASM: Initialization'},
|
||||||
{id:'conio.c', name:'Hello Console I/O'},
|
{id:'ex1.asm', name:'ASM: Scrolling Demo'},
|
||||||
{id:'siegegame.c', name:'Siege Game'},
|
{id:'hello.c', name:'C: Hello PPU'},
|
||||||
{id:'ex1.asm', name:'Assembly Example'},
|
{id:'conio.c', name:'C: Hello Console I/O'},
|
||||||
|
{id:'siegegame.c', name:'C: Siege Game'},
|
||||||
];
|
];
|
||||||
|
|
||||||
/// JSNES
|
/// JSNES
|
||||||
|
31
src/ui.js
31
src/ui.js
@ -35,13 +35,39 @@ Javatari.AUTO_START = false;
|
|||||||
var PRESETS; // presets array
|
var PRESETS; // presets array
|
||||||
var platform_id;
|
var platform_id;
|
||||||
var platform; // platform object
|
var platform; // platform object
|
||||||
|
var originalFileID;
|
||||||
|
var originalText;
|
||||||
|
|
||||||
var toolbar = $("#controls_top");
|
var toolbar = $("#controls_top");
|
||||||
|
|
||||||
|
function getBiggestItems(storage) {
|
||||||
|
var items = [];
|
||||||
|
for (var i = 0; i < storage.length; i++) {
|
||||||
|
var key = storage.key(i);
|
||||||
|
items.push([lpad(storage.getItem(key).length+"", 12), key]);
|
||||||
|
}
|
||||||
|
items.sort();
|
||||||
|
var s = "";
|
||||||
|
for (var i=items.length-5; i<items.length; i++) {
|
||||||
|
s += items[i] + "\n";
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
var FileStore = function(storage, prefix) {
|
var FileStore = function(storage, prefix) {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.saveFile = function(name, text) {
|
this.saveFile = function(name, text) {
|
||||||
|
try {
|
||||||
storage.setItem(prefix + name, text);
|
storage.setItem(prefix + name, text);
|
||||||
|
} catch (e) {
|
||||||
|
if (e.name == 'NS_ERROR_DOM_QUOTA_REACHED') {
|
||||||
|
console.log(e);
|
||||||
|
alert("Sorry, you've reached your local storage quota for this browser.\n\nHere are the biggest items:\n\n" +
|
||||||
|
getBiggestItems(storage));
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.loadFile = function(name) {
|
this.loadFile = function(name) {
|
||||||
return storage.getItem(prefix + name) || storage.getItem(name);
|
return storage.getItem(prefix + name) || storage.getItem(name);
|
||||||
@ -181,7 +207,7 @@ function setLastPreset(id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updatePreset(current_preset_id, text) {
|
function updatePreset(current_preset_id, text) {
|
||||||
if (text.trim().length) {
|
if (text.trim().length && (originalFileID != current_preset_id || text != originalText)) {
|
||||||
store.saveFile(current_preset_id, text);
|
store.saveFile(current_preset_id, text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -193,6 +219,8 @@ function loadCode(text, fileid) {
|
|||||||
editor.clearHistory();
|
editor.clearHistory();
|
||||||
current_output = null;
|
current_output = null;
|
||||||
setLastPreset(fileid);
|
setLastPreset(fileid);
|
||||||
|
originalFileID = fileid;
|
||||||
|
originalText = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadFile(fileid, filename, index) {
|
function loadFile(fileid, filename, index) {
|
||||||
@ -220,7 +248,6 @@ function loadFile(fileid, filename, index) {
|
|||||||
var ext = platform.getToolForFilename(fileid);
|
var ext = platform.getToolForFilename(fileid);
|
||||||
$.get( "presets/"+platform_id+"/skeleton."+ext, function( text ) {
|
$.get( "presets/"+platform_id+"/skeleton."+ext, function( text ) {
|
||||||
loadCode(text, fileid);
|
loadCode(text, fileid);
|
||||||
updatePreset(fileid, text);
|
|
||||||
}, 'text')
|
}, 'text')
|
||||||
.fail(function() {
|
.fail(function() {
|
||||||
alert("Could not load skeleton for " + platform_id + "/" + ext);
|
alert("Could not load skeleton for " + platform_id + "/" + ext);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user