From 1ac9c577353ea9cd97099f2cba98fb58666a3d85 Mon Sep 17 00:00:00 2001 From: Pedro de Oliveira Date: Tue, 12 Aug 2014 22:52:43 +0100 Subject: [PATCH] update --- _index.html | 23 ++ css/jsspeccy.css | 107 +++++++++ images/48x48_folder_blue_open.png | Bin 0 -> 3806 bytes images/48x48_kaboodleloop.png | Bin 0 -> 3375 bytes images/48x48_messagebox_info.png | Bin 0 -> 3829 bytes images/48x48_package_games_arcade.png | Bin 0 -> 2981 bytes images/48x48_player_pause.png | Bin 0 -> 1537 bytes images/48x48_player_play.png | Bin 0 -> 2558 bytes images/48x48_sound_off.png | Bin 0 -> 4371 bytes images/48x48_sound_on.png | Bin 0 -> 4791 bytes images/spectrum48k.png | Bin 0 -> 21385 bytes index.html | 191 +++++++++++++-- jdataview.js => js/jdataview.js | 0 jquery-1.7.2.min.js => js/jquery-1.7.2.min.js | 0 .../jsspeccy-core.min.js | 0 js/ui.js | 223 ++++++++++++++++++ 16 files changed, 527 insertions(+), 17 deletions(-) create mode 100644 _index.html create mode 100644 css/jsspeccy.css create mode 100644 images/48x48_folder_blue_open.png create mode 100644 images/48x48_kaboodleloop.png create mode 100644 images/48x48_messagebox_info.png create mode 100644 images/48x48_package_games_arcade.png create mode 100644 images/48x48_player_pause.png create mode 100644 images/48x48_player_play.png create mode 100644 images/48x48_sound_off.png create mode 100644 images/48x48_sound_on.png create mode 100644 images/spectrum48k.png rename jdataview.js => js/jdataview.js (100%) rename jquery-1.7.2.min.js => js/jquery-1.7.2.min.js (100%) rename jsspeccy-core.min.js => js/jsspeccy-core.min.js (100%) create mode 100644 js/ui.js diff --git a/_index.html b/_index.html new file mode 100644 index 0000000..ebff57f --- /dev/null +++ b/_index.html @@ -0,0 +1,23 @@ + + + + My wonderful page + + + + + + + +
+ + \ No newline at end of file diff --git a/css/jsspeccy.css b/css/jsspeccy.css new file mode 100644 index 0000000..884b2e0 --- /dev/null +++ b/css/jsspeccy.css @@ -0,0 +1,107 @@ +.jsspeccy { + font-family: Helvetica, Arial, sans-serif; + font-size: 11pt; + position: relative; + width: 640px; +} +.jsspeccy canvas { + padding: 0; + margin: 0; +} +.jsspeccy .toolbar { + margin: 0; + padding: 8px; + overflow: hidden; + background-color: #445; + list-style-type: none; +} +.jsspeccy .toolbar li { + float: left; + padding-right: 8px; +} + +.jsspeccy .toolbar button { + width: 64px; + height: 64px; + text-indent: -5000px; + direction: ltr; + background-position: center center; + background-repeat: no-repeat; +} + +.jsspeccy .toolbar label { + color: white; +} + + +.jsspeccy .toolbar .stop { + background-image: url(images/48x48_player_pause.png); +} +.jsspeccy .toolbar .start { + background-image: url(images/48x48_player_play.png); +} +.jsspeccy .toolbar .reset { + background-image: url(images/48x48_kaboodleloop.png); +} +.jsspeccy .toolbar .audio { + background-image: url(images/48x48_sound_off.png); +} +.jsspeccy .toolbar .audio.enabled { + background-image: url(images/48x48_sound_on.png); +} +.jsspeccy .toolbar .open { + background-image: url(images/48x48_folder_blue_open.png); +} +.jsspeccy .toolbar .about { + background-image: url(images/48x48_messagebox_info.png); +} + +.jsspeccy .panel { + top: 30px; + left: 50%; + margin-left: -300px; + padding-left: 10px; + padding-right: 10px; + width: 580px; + height: 400px; + background-color: white; + color: black; + display: none; + position: absolute; + border: 1px solid #444; +} + +.jsspeccy .panel .close { + position: absolute; + right: 0px; +} + +.jsspeccy .panel h1, .jsspeccy .panel h2 { + margin-top: 0.8em; + margin-bottom: 0.8em; +} + +.jsspeccy .panel .note { + font-weight: normal; + font-style: italic; + font-size: 10pt; +} + +.jsspeccy .about { + text-align: center; +} + +.jsspeccy .open-file .search-wos input[type=search] { + width: 400px; +} + +.jsspeccy .about h1 { + font-size: 18pt; + margin-bottom: 0; +} +.jsspeccy .about h2 { + font-size: 12pt; +} +.jsspeccy .about .licence { + font-size: 9pt; +} diff --git a/images/48x48_folder_blue_open.png b/images/48x48_folder_blue_open.png new file mode 100644 index 0000000000000000000000000000000000000000..f7314b3494168b156959a0fe7f27f124b9f63cb8 GIT binary patch literal 3806 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 TKB3Oow*t}OaXW5?@{0chln%~g literal 0 HcmV?d00001 diff --git a/images/48x48_package_games_arcade.png b/images/48x48_package_games_arcade.png new file mode 100644 index 0000000000000000000000000000000000000000..78e3b20ff3c7f4faa78d2e2a975af26b3ae3f88a GIT binary patch literal 2981 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 aLg2TWfAxWHGUk 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 b(B}fAr4d_GSfd46=Lzuj+TwZFotyT50ZWwP literal 0 HcmV?d00001 diff --git a/images/spectrum48k.png b/images/spectrum48k.png new file mode 100644 index 0000000000000000000000000000000000000000..d062ebb37d37db431bdd58ee6e986ed8558b10e8 GIT binary patch literal 21385 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 cz_ - - My wonderful page - - - + + jsspeccy + + + + + + - - - -
- - \ No newline at end of file + + JSSpeccy.UI({ + container: 'jsspeccy', + controller: jsspeccy + }); + $('#example-games').change(function() { + var filename = $(this).val(); + if (filename) { + jsspeccy.loadFromUrl( + 'http://jsspeccy.zxdemo.org/games/' + filename, + {'autoload': true} + ); + } + }) + }); + + + +
+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
    + +
    +
    + +
    +
  • +
+ +
+ + +

Load from disk: .tap, .tzx, .sna, .z80 files supported

+ +

Load from web:

+ +

Search World Of Spectrum:

+
+ + +
+ + + +
+
+ + +

JSSpeccy

+

a ZX Spectrum emulator in Javascript

+

By Matt Westcott

+ +

Sound routines by Darren Coles

+ +

JSSpeccy homepage (including downloads and source code)

+

Based on Fuse by Philip Kendall et al. Icons from Nuvola by David Vignoni.

+
+

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
+
+
+

JSSpeccy v2.2.1

+

A ZX Spectrum emulator in Javascript

+

This is a (mostly) accurate recreation of the 48K and 128K Spectrums. Features currently unsupported are:

+
    +
  • Custom tape loaders
  • +
  • Some particularly complex multicolour tricks
  • +
+

Tested on Chrome 32, Firefox 26 and Safari 7.0.1.

+

Not sure what to play? Choose a game from this list to get started...

+ + +

Grab the source code on Github. Want to include JSSpeccy on your website? Embedding instructions

+

Created by Matt Westcott. Follow me on Twitter

+

Spectrum photo by Bill Bertram

+
+
+ + diff --git a/jdataview.js b/js/jdataview.js similarity index 100% rename from jdataview.js rename to js/jdataview.js diff --git a/jquery-1.7.2.min.js b/js/jquery-1.7.2.min.js similarity index 100% rename from jquery-1.7.2.min.js rename to js/jquery-1.7.2.min.js diff --git a/jsspeccy-core.min.js b/js/jsspeccy-core.min.js similarity index 100% rename from jsspeccy-core.min.js rename to js/jsspeccy-core.min.js diff --git a/js/ui.js b/js/ui.js new file mode 100644 index 0000000..11dda0e --- /dev/null +++ b/js/ui.js @@ -0,0 +1,223 @@ +JSSpeccy.UI = function(opts) { + var self = {}; + + var container = opts.container; + if (typeof(container) === 'string') { + container = document.getElementById(container); + } + var controller = opts.controller; + + var setInnerText; + if (document.getElementsByTagName("body")[0].innerText !== undefined) { + setInnerText = function (elem, text) { + elem.innerText = text; + }; + } else { + setInnerText = function (elem, text) { + elem.textContent = text; + }; + } + + $(container).addClass('jsspeccy'); + + + /* Set up toolbar */ + var toolbar = $('.toolbar', container); + + var stopStartButton = $('button.stop-start', toolbar); + stopStartButton.click(function() { + if (controller.isRunning) { + controller.stop(); + } else { + controller.start(); + } + }); + function refreshStopStartButton() { + if (controller.isRunning) { + stopStartButton.removeClass('start').addClass('stop'); + } else { + stopStartButton.removeClass('stop').addClass('start'); + } + } + controller.onStart.bind(refreshStopStartButton); + controller.onStop.bind(refreshStopStartButton); + refreshStopStartButton(); + + $('button.reset', toolbar).click(function() { + controller.reset(); + }); + + var audioButton = $('button.audio', toolbar); + audioButton.click(function() { + controller.setAudioState(!controller.getAudioState()); + }); + function refreshAudioButton(audioState) { + audioButton.toggleClass('enabled', audioState); + } + controller.onChangeAudioState.bind(refreshAudioButton); + refreshAudioButton(controller.getAudioState()); + + $('button.open', toolbar).click(function() { + showPanel('.open-file'); + }); + + $('button.about', toolbar).click(function() { + showPanel('.about'); + }); + + var selectModel = $('select.select-model', toolbar); + var modelsById = {}; + for (var i = 0; i < JSSpeccy.Spectrum.MODELS.length; i++) { + var model = JSSpeccy.Spectrum.MODELS[i]; + modelsById[model.id] = model; + selectModel.append( + $('').text(model.name).attr({'value': model.id}) + ); + } + selectModel.change(function() { + var modelId = $(this).val(); + controller.setModel(modelsById[modelId]); + }); + function refreshModel() { + selectModel.val(controller.getModel().id); + } + refreshModel(); + controller.onChangeModel.bind(refreshModel); + + var autoloadTapes = $('input.autoload-tapes'); + + /* Set up panels */ + var panels = []; + + function showPanel(selector) { + $('.panel', container).not(selector).hide(); + $('.panel', container).filter(selector).show(); + controller.deactivateKeyboard(); + } + + function hidePanels() { + $('.panel', container).hide(); + controller.activateKeyboard(); + } + + $('.panel button.close', container).click(function() { + hidePanels(); + }); + + var openFilePanel = $('.panel.open-file', container); + + var fileSelect = openFilePanel.find('input[type="file"]'); + fileSelect.change(function() { + controller.loadLocalFile(this.files[0], {'autoload': autoloadTapes.is(':checked')}); + fileSelect.val(''); + hidePanels(); + }); + + var urlField = openFilePanel.find('input[type="url"]'); + openFilePanel.find('button.open-url').click(function() { + var url = urlField.val(); + if (url !== '') { + controller.loadFromUrl(url, {'autoload': autoloadTapes.is(':checked')}); + hidePanels(); + } + }); + + + /* World Of Spectrum search interface */ + + var wosSearch = openFilePanel.find('form.search-wos'); + var wosSearchField = wosSearch.find('input[type="search"]'); + var wosSearchBtn = wosSearch.find('input[type="submit"]'); + + var wosMatches = openFilePanel.find('select.wos-matches'); + var wosDownloads = openFilePanel.find('select.wos-downloads'); + var wosOpen = openFilePanel.find('button.open-from-wos'); + + wosOpen.attr('disabled', 'disabled'); + + wosSearch.submit(function() { + var query = wosSearchField.val(); + if (query !== '') { + $.getJSON('http://www.worldofspectrum.org/api/infoseek_search_json.cgi?callback=?', + {title: query}, + function(results) { + wosMatches.empty(); + wosDownloads.empty(); + wosOpen.attr('disabled', 'disabled'); + if (results.matches) { + for (var i = 0; i < results.matches.length; i++) { + var result = results.matches[i]; + var optionText = result.title; + if (result.publisher) { + optionText += " (" + result.publisher + ")"; + } + var option = $('').text(optionText).attr('value', result.id); + wosMatches.append(option); + } + wosMatches.removeAttr('disabled'); + } else { + wosMatches.append(''); + wosMatches.attr('disabled', 'disabled'); + } + } + ); + } + return false; + }); + + wosMatches.change(function() { + wosDownloads.empty(); + wosOpen.attr('disabled', 'disabled'); + var id = $(this).val(); + if (id) { + $.getJSON('http://www.worldofspectrum.org/api/infoseek_select_json.cgi?callback=?', + {id: id}, + function(response) { + wosDownloads.empty(); + if (response.downloads) { + for (var i = 0; i < response.downloads.length; i++) { + var download = response.downloads[i]; + var optionText; + if (download.origin !== '') { + optionText = download.origin + " - " + download.type; + } else { + optionText = download.type; + } + var option = $('').text(optionText).attr('value', download.link); + wosDownloads.append(option); + } + wosDownloads.removeAttr('disabled'); + } else { + wosDownloads.append(''); + wosDownloads.attr('disabled', 'disabled'); + } + } + ); + } + }); + + wosDownloads.change(function() { + var url = $(this).val(); + if (url) { + wosOpen.removeAttr('disabled'); + } else { + wosOpen.attr('disabled', 'disabled'); + } + }); + + function loadSelectedFile() { + var url = wosDownloads.val(); + if (url) { + controller.loadFromUrl( + url.replace('ftp://ftp.worldofspectrum.org/pub/sinclair/', 'http://wosproxy.zxdemo.org/unzip/'), + {'autoload': autoloadTapes.is(':checked')} + ); + hidePanels(); + } + } + + wosOpen.click(loadSelectedFile); + wosDownloads.dblclick(loadSelectedFile); + + return self; +};