2019-02-19 04:42:50 +00:00
<!DOCTYPE html>
2015-07-11 05:55:36 +00:00
<!--
2019-02-19 04:42:50 +00:00
Copyright 2010-2019 Will Scullin < scullin @ scullinsteel . com >
2015-07-11 05:55:36 +00:00
2013-10-10 18:03:07 +00:00
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation. No representations are made about the suitability of this
software for any purpose. It is provided "as is" without express or
implied warranty.
-->
< html >
< head >
< title > Apple ][js - An Apple 2 Emulator in JavaScript< / title >
2019-02-19 04:42:50 +00:00
< meta name = "viewport" content = "width=640, height=device-height, user-scalable=no" / >
2013-10-10 18:03:07 +00:00
< meta name = "apple-mobile-web-app-capable" content = "yes" >
2013-11-18 01:07:14 +00:00
< meta name = "apple-mobile-web-app-title" content = "Apple ][js" >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black-translucent" >
2013-10-10 18:03:07 +00:00
< meta charset = "utf-8" / >
2014-07-30 19:01:57 +00:00
< meta name = "description" content = "Apple ][js is an Apple ][ emulator written using only JavaScript and HTML5. It has color display, sound and disk support. It works best in the Chrome and Safari browsers." / >
2013-10-10 18:03:07 +00:00
< meta name = "keywords" content = "apple2,apple,ii,javascript,emulator,html5" / >
< link rel = "apple-touch-icon" href = "img/webapp-iphone.png" / >
< link rel = "apple-touch-icon" size = "72x72" href = "img/webapp-ipad.png" / >
2019-02-19 04:42:50 +00:00
< link rel = "shortcut icon" href = "img/logoicon.png" / >
2013-10-10 18:03:07 +00:00
< link rel = "stylesheet" type = "text/css" href = "css/apple2.css" / >
2019-02-19 04:42:50 +00:00
< link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.0.2/css/all.css" / >
2013-10-10 18:03:07 +00:00
2013-11-16 20:38:18 +00:00
<!-- Disk Index -->
< script type = "text/javascript" src = "json/disks/index.js" > < / script >
2013-10-10 18:03:07 +00:00
< / head >
2019-02-19 04:42:50 +00:00
< body class = "apple2"
ondragover="handleDragOver(0, event)"
ondrop="handleDrop(0, event)"
ondragend="handleDragEnd(0, event)">
< div style = "margin: auto; width: 614px" >
2017-09-23 04:42:57 +00:00
< div id = "header" >
< a href = "about.html" target = "_blank" >
< img src = "img/badge.png" id = "badge" / >
< / a >
< h1 id = "subtitle" > An Apple ][ Emulator in JavaScript< / h1 >
< / div >
< div id = "display" >
< div class = "overscan" >
< canvas id = "screen" width = "560" height = "384" > < / canvas >
< / div >
< / div >
2013-10-10 18:03:07 +00:00
< div class = "inset" >
2019-02-19 04:42:50 +00:00
< div style = "float: left; width: 50%"
ondragover="handleDragOver(1, event)"
ondrop="handleDrop(1, event)"
2019-03-13 04:11:00 +00:00
ondragend="handleDragEnd(1, event)">
2019-02-19 04:42:50 +00:00
< button id = "diskload1" class = "diskload" title = "Load Disk"
2013-10-10 18:03:07 +00:00
onclick="openLoad(1, event);">
2019-02-19 04:42:50 +00:00
< i class = "fas fa-folder-open" > < / i >
2013-10-10 18:03:07 +00:00
< / button >
2019-02-19 04:42:50 +00:00
< button id = "disksave1" class = "disksave" title = "Save Disk"
2013-10-23 02:35:47 +00:00
onclick="openSave(1, event);">
2019-02-19 04:42:50 +00:00
< i class = "fas fa-save" > < / i >
2013-10-10 18:03:07 +00:00
< / button >
2019-02-19 04:42:50 +00:00
< div class = "disk" id = "disk1" > < / div >
< span id = "disklabel1" class = "disklabel" > Disk 1< / span >
2013-10-10 18:03:07 +00:00
< / div >
2019-02-19 04:42:50 +00:00
< div style = "float: left; width: 50%"
ondragover="handleDragOver(2, event)"
ondrop="handleDrop(2, event)"
ondragend="handleDragEnd(2, event)">
< button id = "diskload2" class = "diskload" title = "Load Disk"
2013-10-10 18:03:07 +00:00
onclick="openLoad(2, event);">
2019-02-19 04:42:50 +00:00
< i class = "fas fa-folder-open" > < / i >
2013-10-10 18:03:07 +00:00
< / button >
2019-02-19 04:42:50 +00:00
< button id = "disksave2" class = "disksave" title = "Save Disk"
2013-10-23 02:35:47 +00:00
onclick="openSave(2, event);">
2019-02-19 04:42:50 +00:00
< i class = "fas fa-save" > < / i >
2013-10-10 18:03:07 +00:00
< / button >
2019-02-19 04:42:50 +00:00
< div class = "disk" id = "disk2" > < / div >
< span id = "disklabel2" class = "disklabel" > Disk 2< / span >
2013-10-10 18:03:07 +00:00
< / div >
< div style = "clear: both" > < / div >
< / div >
< div class = "inset" >
< div id = "khz" onclick = "showFPS = !showFPS" > 0KHz< / div >
2019-02-19 04:42:50 +00:00
< button id = "pause-run" onclick = "pauseRun()" title = "Pause/Run" >
< i class = "fas fa-pause" > < / i >
< / button >
< button id = "toggle-sound" onclick = "toggleSound()" title = "Toggle Sound" >
< i class = "fas fa-volume-off" > < / i >
< / button >
2019-03-13 04:11:00 +00:00
< button id = "toggle-printer" onclick = "openPrinterModal()" title = "Toggle Printer" >
2019-02-19 04:42:50 +00:00
< i class = "fas fa-print" > < / i >
< / button >
2013-10-10 18:03:07 +00:00
< div style = "float: right" >
2019-03-13 04:11:00 +00:00
< button onclick = "window.open('about.html', 'blank')" title = "About" >
2019-02-19 04:42:50 +00:00
< i class = "fas fa-info" > < / i >
2019-03-13 04:11:00 +00:00
< / button >
< button onclick = "openOptions()" title = "Options" >
2019-02-19 04:42:50 +00:00
< i class = "fas fa-cog" > < / i >
< / button >
2013-10-10 18:03:07 +00:00
< / div >
< / div >
< div class = "inset" >
2019-02-19 04:42:50 +00:00
< div style = "margin: 0 10px" >
< div id = "keyboard" > < / div >
< div id = "textarea" style = "display: none" >
< button onclick = "io.keyDown(0x1b)" >
ESC
< / button >
< button onclick = "reset()" style = "float: right; margin-left: 10px" >
Reset
< / button >
< button onclick = "io.keyDown(0x15)" style = "float: right" >
→
< / button >
< button onclick = "io.keyDown(0x08)" style = "float: right" >
←
< / button >
< label for = "text_input" > Text Input< / label >
< textarea rows = "10" style = "width: 99%" id = "text_input" > < / textarea >
< br / >
2019-03-13 04:11:00 +00:00
< button onclick = "io.setKeyBuffer(document.querySelector('#text_input').innerText)" >
2019-02-19 04:42:50 +00:00
Send
< / button >
< input type = "checkbox" id = "buffering" / >
< label for = "buffering" > Buffer< / label >
< button style = "float: right"
2019-03-13 04:11:00 +00:00
onclick="document.querySelector('#keyboard').style.display = 'block'; document.querySelector('#textarea').style.display = 'none'">
2019-02-19 04:42:50 +00:00
Keyboard
< / button >
< / div >
2017-09-23 04:42:57 +00:00
< / div >
2013-10-10 18:03:07 +00:00
< / div >
< / div >
2019-03-13 04:11:00 +00:00
< div class = "modal" id = "loading-modal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" data-micromodal-close >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "Loading" >
< header class = "modal__header" >
2019-03-14 02:27:55 +00:00
< span class = "modal__title" id = "loading-modal-title" >
2019-03-13 04:11:00 +00:00
Loading...
< / span >
< / header >
< / div >
< / div >
2013-10-10 18:03:07 +00:00
< / div >
2019-03-13 04:11:00 +00:00
< div class = "modal" id = "options-modal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" data-micromodal-close >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "Options" >
< header class = "modal__header" >
2019-03-14 02:27:55 +00:00
< span class = "modal__title" id = "options-modal-title" >
2019-03-13 04:11:00 +00:00
Options
< / span >
< button class = "modal__close" aria-label = "Close modal" data-micromodal-close >
< / button >
< / header >
< main class = "modal__content" id = "options-modal-content" >
< h3 > Type< / h3 >
< ul >
< li >
< select id = "computer_type2" value = "apple2plus" onchange = "updateCPU()" >
< option value = "apple2plus" > Apple ][+< / option >
< option value = "apple2" > Autostart Apple ][< / option >
< option value = "original" > Apple ][< / option >
< option value = "apple2j" > Apple ][j+< / option >
< option value = "apple2lc" > Apple ][+ (lowercase font)< / option >
< option value = "apple2pig" > Apple ][+ (pig font)< / option >
< / select >
< / li >
< li >
< i > * Reload page to take effect< / i >
< / li >
< / ul >
< h3 > CPU< / h3 >
< ul >
< li >
< input type = "checkbox" id = "accelerator_toggle" onclick = "updateCPU()" / >
< label for = "accelerator_toggle" >
Accelerated CPU
< / label >
< / li >
< / ul >
< h3 > Joystick< / h3 >
< ul >
< li >
< input type = "checkbox" id = "disable_mouse"
onclick="updateJoystick()" />
< label for = "disable_mouse" >
Disable Mouse Joystick
< / label >
< / li >
< li >
< input type = "checkbox" id = "flip_x"
onclick="updateJoystick()" />
< label for = "flip_x" >
Flip X-Axis
< / label >
< / li >
< li >
< input type = "checkbox" id = "flip_y"
onclick="updateJoystick()" />
< label for = "flip_y" >
Flip Y-Axis
< / label >
< / li >
< li >
< input type = "checkbox" id = "swap_x_y"
onclick="updateJoystick()" />
< label for = "swap_x_y" >
Swap X-Y Axis
< / label >
< / li >
< / ul >
< h3 > Monitor< / h3 >
< ul >
< li >
< input type = "checkbox" id = "green_screen"
onclick="updateScreen()" />
< label for = "green_screen" >
Green Screen
< / label >
< / li >
< li >
< input type = "checkbox" id = "show_scanlines"
onclick="updateScreen()" />
< label for = "show_scanlines" >
Show Scanlines
< / label >
< / li >
< / ul >
< h3 > Sound< / h3 >
< ul >
< li >
< input type = "checkbox" id = "enable_sound"
onclick="updateSound()" checked="checked" />
< label for = "enable_sound" >
2019-03-14 02:27:55 +00:00
Enable
2019-03-13 04:11:00 +00:00
< / label >
< / li >
< / ul >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn" data-micromodal-close aria-label = "Close this dialog window" > Close< / button >
< / footer >
< / div >
2016-11-28 01:28:49 +00:00
< / div >
2013-10-10 18:03:07 +00:00
< / div >
2019-03-13 04:11:00 +00:00
< div class = "modal" id = "save-modal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" data-micromodal-close >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "Save Disk" >
< header class = "modal__header" >
2019-03-14 02:27:55 +00:00
< span class = "modal__title" id = "save-modal-title" >
2019-03-13 04:11:00 +00:00
Save Disk
< / span >
< button class = "modal__close" aria-label = "Close modal" data-micromodal-close >
< / button >
< / header >
< main class = "modal__content" id = "save-modal-content" >
< form action = "#" onsubmit = "return false;" >
2019-03-14 02:27:55 +00:00
< h3 > Save to Browser< / h3 >
2019-03-13 04:11:00 +00:00
Save Name: < input type = "text" name = "name" id = "save_name"
style="width: 200px" />
< / form >
< hr / >
< div >
2019-03-14 02:27:55 +00:00
< h3 > Download to Local Disk< / h3 >
2019-03-13 04:11:00 +00:00
< a id = "local_save_link" class = "button" > Download< / a >
< / div >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn" onclick = "doSave()" aria-label = "Save disk locally" > Save< / button >
< / footer >
< / div >
< / div >
2013-10-10 18:03:07 +00:00
< / div >
2019-03-13 04:11:00 +00:00
< div class = "modal" id = "manage-modal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" data-micromodal-close >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "Load Disk" >
< header class = "modal__header" >
< span class = "modal__title" id = "manage-modal-title" >
Manage Local Saves
< / span >
< button class = "modal__close" aria-label = "Close modal" data-micromodal-close >
< / button >
< / header >
< main class = "modal__content" id = "manage-modal-content" >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn" data-micromodal-close aria-label = "Close this dialog window" > OK< / button >
< / footer >
< / div >
< / div >
2016-11-28 01:28:49 +00:00
< / div >
2019-03-13 04:11:00 +00:00
< div class = "modal" id = "http-modal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" data-micromodal-close >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "Load Disk" >
< header class = "modal__header" >
< span class = "modal__title" id = "http-modal-title" >
Load URL
< / span >
< button class = "modal__close" aria-label = "Close modal" data-micromodal-close >
< / button >
< / header >
< main class = "modal__content" id = "http-modal-content" >
< form action = "#" >
< input type = "text" id = "http_url" style = "width: 500px" / >
< / form >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn" data-micromodal-close aria-label = "Close this dialog window" > OK< / button >
< / footer >
< / div >
< / div >
2013-10-10 18:03:07 +00:00
< / div >
2019-03-13 04:11:00 +00:00
< div class = "modal" id = "load-modal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" data-micromodal-close >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "Load Disk" >
< header class = "modal__header" >
< span class = "modal__title" id = "load-modal-title" >
Load Disk
< / span >
< button class = "modal__close" aria-label = "Close modal" data-micromodal-close >
< / button >
< / header >
< main class = "modal__content" id = "load-modal-content" >
< table >
< tr >
< td >
< select id = "category_select" multiple = "multiple"
onchange="selectCategory(event)" >
< / select >
< / td >
< td >
< select id = "disk_select" multiple = "multiple"
onchange="selectDisk(event)"
ondblclick="clickDisk(event)">
< / select >
< / td >
< / tr >
< / table >
< form action = "#" >
< input type = "file" id = "local_file" / >
< / form >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn" data-micromodal-close aria-label = "Close this dialog window" > Cancel< / button >
< button class = "modal__btn" onclick = "doLoad()" aria-label = "Open the selected disk" > Open< / button >
< / footer >
< / div >
< / div >
< / div >
< div class = "modal" id = "printer-modal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" data-micromodal-close >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "Printer" >
< header class = "modal__header" >
< span class = "modal__title" id = "printer-modal-title" >
Printer
< / span >
< button class = "modal__close" aria-label = "Close modal" data-micromodal-close >
< / button >
< / header >
< main class = "modal__content" id = "printer-modal-content" >
2019-03-14 02:27:55 +00:00
< div class = "feed" >
< div class = "paper" > < / div >
< / div >
2019-03-13 04:11:00 +00:00
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn" data-micromodal-close aria-label = "Close this dialog window" > Close< / button >
< / footer >
< / div >
2019-02-19 04:42:50 +00:00
< / div >
< / div >
2019-03-01 05:21:18 +00:00
< script src = "dist/main2.js" > < / script >
2013-10-10 18:03:07 +00:00
< / body >
< / html >